簡體   English   中英

最簡單的2D數組,使用g ++,具有一個可變維?

[英]Simplest 2D array, using g++, with one variable dimension?

我想做一個這樣的數組:

double array[variable][constant];

只有第一維是可變的。 使用變量作為第一維進行聲明會導致初始化錯誤。 有沒有簡單的方法可以使用指針或其他基本類型呢?

可變長度數組未在最新的C ++標准中實現。 您可以改用std::vector

std::vector<std::vector<double> > arr;

或者,例如要固定第二維(在此示例中為10),您可以執行

std::vector<std::array<double, 10> > arr1; // to declare a fixed second dimension

否則,您需要使用舊的指針,

double (*arr)[10]; // pointer to array-of-10-doubles

根據@Chiel的評論,可以提高性能

typedef double (POD_arr)[10];
std::vector<POD_arr> arr;

這樣,您就可以將所有數據連續存儲在內存中,因此訪問應該與使用普通的舊C數組一樣快。

PS:似乎最后一個聲明違反了標准,因為正如@juanchopanza所述,POD數組不滿足將數據存儲在STL數組中的要求(它們是不可分配的)。 但是, g++可以毫無問題地編譯上述2條聲明,並且可以在程序中使用它們。 但是clang++失敗了。

您可以執行類似的操作,但這不是真正的2D數組。 它基於以下一般思想:在內部,多維數組必須與以下規則有關:對於維度(n,m),您必須具有以下array2d[i, j] = array1d[j + i*m]array2d[i, j] = array1d[j + i*m]

#include "iostream"

using namespace std;

class dynArray {
private:
    double *array;
    int dim2;
public:
    dynArray(int variable, int constant) {
        array = new double[variable * constant];
    dim2 = constant;
    }
    ~dynArray() {
        delete array;
    }

    double value(int i, int j) {
        return array[j + i * dim2];
    }

    double *pt(int i, int j) {
        return array + j + i * dim2;
    }
};

int main(int argc, char*argv[]) {
    dynArray d(3,4);
    *d.pt(2,3) = 6.;
    cout << "Result : " << d.value(2,3) << endl;
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM