我正在尝试创建一个class grid
,其中包含数据成员unsigned NR
,unsigned NC
,它还应包含一个二维数组double Coordiantes[NR][NC]
。我希望通过类构造函数初始化数据成员NR
和NC
。我试图避免动态分配2-D数组,因为我更喜欢连续的内存分配,以尽可能避免缓存未命中。
我不确定是否可行,但任何输入都会有所帮助。
答案 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。