我正在将N-Dim图像立方体编码为不同的图像格式。我不知道图像的尺寸,直到运行时,我用来从原始图像读取的库需要一个N-dim数组目标缓冲区作为参数。
如何在C ++中声明这样的数组?谢谢:))
答案 0 :(得分:2)
简短的回答是你不能在C ++中声明这样的数组。数组的维度是类型的一部分(有一个杂项例外,对于extern
数组声明,有时维度的一个的值可能是未知的)。维度的数量始终是类型的一部分,并且必须在编译时知道类型。
您可以做的是使用适当大小的“扁平”阵列。例如,如果你需要一个3x3 ... x3数组,那么你可以在运行时计算3^n
,动态分配那么多int
(为方便起见可能使用vector<int>
),你有与int[3][3]...[3]
布局相同的内存。您可以通过void*
。
我不确定在C ++中将平面数组别名为多维数组是完全合法的。但首先,你正在调用的函数实际上可能不会以这种方式对其进行别名,因为它在编译时也不知道维度。其次它会在实践中起作用(如果没有,你所调用的函数要么被破坏,要么有一些巧妙的方法来处理你应该找到并复制的内容)。
答案 1 :(得分:-2)
在这种情况下你不能使用数组。 Array仅适用于编译时已知大小和维度的数据。尝试使用 std :: vector 数组