创建一个N维数组,其中N是在运行时确定的(C ++)

时间:2013-01-15 09:48:41

标签: c++ multidimensional-array

我正在将N-Dim图像立方体编码为不同的图像格式。我不知道图像的尺寸,直到运行时,我用来从原始图像读取的库需要一个N-dim数组目标缓冲区作为参数。

如何在C ++中声明这样的数组?谢谢:))

2 个答案:

答案 0 :(得分:2)

简短的回答是你不能在C ++中声明这样的数组。数组的维度是类型的一部分(有一个杂项例外,对于extern数组声明,有时维度的一个的值可能是未知的)。维度的数量始终是类型的一部分,并且必须在编译时知道类型。

您可以做的是使用适当大小的“扁平”阵列。例如,如果你需要一个3x3 ... x3数组,那么你可以在运行时计算3^n,动态分配那么多int(为方便起见可能使用vector<int>),你有与int[3][3]...[3]布局相同的内存。您可以通过void*

来引用此内存

我不确定在C ++中将平面数组别名为多维数组是完全合法的。但首先,你正在调用的函数实际上可能不会以这种方式对其进行别名,因为它在编译时也不知道维度。其次它会在实践中起作用(如果没有,你所调用的函数要么被破坏,要么有一些巧妙的方法来处理你应该找到并复制的内容)。

答案 1 :(得分:-2)

在这种情况下你不能使用数组。 Array仅适用于编译时已知大小和维度的数据。尝试使用 std :: vector 数组