静态声明的二维数组C ++作为类的数据成员

时间:2016-03-21 05:00:11

标签: c++ arrays multidimensional-array

我正在尝试创建一个class grid,其中包含数据成员unsigned NRunsigned NC,它还应包含一个二维数组double Coordiantes[NR][NC]。我希望通过类构造函数初始化数据成员NRNC。我试图避免动态分配2-D数组,因为我更喜欢连续的内存分配,以尽可能避免缓存未命中。

我不确定是否可行,但任何输入都会有所帮助。

2 个答案:

答案 0 :(得分:5)

class Array2D {
public:
    vector<int> v;
    int nc;
    Array2D(int NR, int NC) : v(NR*NC), nc(NC) {}
    int* operator[](int r) { return &v[r*nc]; }
};

int main()
{
    Array2D array2d(2, 3);
    array2d[0][0] = 1;
    array2d[1][2] = 6;
}

这允许您创建一个类似2D数组的类。它很快,数据也是连续的。

答案 1 :(得分:2)

我建议你只使用std::vector<double>(NC*NR) 并通过coord.at(i*NC + j)(或coord[i*NC + j]进行索引,当您的代码正确并且您希望从中收集性能时)。

您将获得连续的内存和缓存友好循环,而无需进行自己的内存分配。在可能的情况下总是喜欢RAII。