如何声明可以在整个程序中使用的全局2d 3d 4d ...数组(堆版本)变量?

Emr*_*aya 1 c++ heap

class1.cpp

int a=10; int b=5; int c=2;
//for this array[a][b][c]

int*** array=new int**[a];


for(int i =0; i<a; i++)
{ 
    array[i] = new int*[b];        
    for(int k =0; k<b; k++) 
    {
       array[i][k] = new int[c];
    }  
}
Run Code Online (Sandbox Code Playgroud)

我如何在其他.cpp文件中使用此数组?

Nat*_*ica 5

而不是手动分配数组,你应该至少使用一个std::vector.你要做的是有一个包含的头文件

extern std::vector<std::vector<std::vector<int>>> data;
Run Code Online (Sandbox Code Playgroud)

您将包含在您希望与之共享矢量的所有cpp文件中,然后在单个cpp文件中包含

std::vector<std::vector<std::vector<int>>> data = std::vector<std::vector<std::vector<int>(a, std::vector<std::vector<int>>(b, std::vector<int>(c)));
Run Code Online (Sandbox Code Playgroud)

现在,您将拥有一个共享的全局对象,并且它具有托管生存期.


你不应该真的使用嵌套向量.它可以将数据分散到内存中,因此它不是非常缓存友好的.您应该使用具有单维向量的类,并假设它使用数学具有多个维度.一个非常基本的例子就是这样的

class matrix
{
    std::vector<int> data;
    int row; // this really isn't needed as data.size() will give you rows
    int col;
    int depth;
public:
    matrix(int x, int y, int z) : data(x * y * z), row(x), col(y), depth(z) {}
    int& operator()(int x, int y, int z) { return data[x + (y * col) + (z * col * depth)]; }
};
Run Code Online (Sandbox Code Playgroud)

然后头文件将是

extern matrix data;
Run Code Online (Sandbox Code Playgroud)

并且单个cpp文件将包含

matrix data(a, b, c);
Run Code Online (Sandbox Code Playgroud)