3d - > 1D数组索引

时间:2011-01-26 21:38:20

标签: c++ arrays multidimensional-array

在C ++中,W * H * D大小的3D数组的索引值是什么?

对于特定的i,j,k这是正确的索引:

我* W * H + J * W + K

5 个答案:

答案 0 :(得分:6)

你所写的内容相当于这样做的指针运算:

T x[D][H][W];

x[i][j][k];  // Pointer arithmetic done here

显然,根据您订购DHW(或ijk)的方式,会有所不同。

答案 1 :(得分:0)

没有一个“正确”的订单,但您提供的版本应该有效。应用索引的顺序将决定您是执行行主索引还是列主索引。如果您正在移植Fortran代码(例如),则可以反转“正常”C顺序。

答案 2 :(得分:0)

在这种情况下,宽度,高度和深度毫无意义。您需要知道的是,多维数组存储在row-major order

答案 3 :(得分:0)

是的,假设i从0 ... D-1变化,j从0 ... H-1变化,k从0变化... W- 1。

通常,我认为拥有索引器的目的是在稀疏矩阵中表达关系,这样你就不需要处理整个事情(并为它消耗内存)。如果您的数据跨越整个矩阵,您可能会考虑将3d矩阵创建为指向指针数组的指针,指针数组本身指向一个指针数组。使用此功能可以使用x[i][j][k]表示法,但可能更快。

有关说明,请参阅http://www.nr.com/cpppages/chapappsel.pdf

答案 4 :(得分:-4)

如果您需要迭代所有元素,最好在

中进行
for i
    for j
        for k

顺序。这样,它将是最快的,因为数组的索引每次递增1并且可以预先缓存值。 不仅有一种正确的方法可以做到这一点,但你可能选择了最好的方法。