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

Statically declared 2-D array C++ as data member of a class

本文关键字:数据成员 二维数组 声明 静态 C++      更新时间:2023-10-16

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

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

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 数组的类。它速度快,数据是连续的。

我建议你简单地使用std::vector<double>(NC*NR)
并按coord.at(i*NC + j)(或coord[i*NC + j],当您的代码正确并且想要从中收集性能时)索引到它。

您将获得连续的内存和缓存友好循环,而无需执行自己的内存分配。如果可能的话,总是更喜欢RAII。