C++中,大小为W*H*D的三维数组的索引值是什么?
对于特定的i、j、k,这是正确的索引方法吗:
i*W*H+j*W+k
C++中,大小为W*H*D的三维数组的索引值是什么?
对于特定的i、j、k,这是正确的索引方法吗:
i*W*H+j*W+k
T x[D][H][W];
x[i][j][k]; // Pointer arithmetic done here
显然,根据您如何排序D
,H
和W
(或i
,j
,k
),计算结果会有所不同。
没有一个“正确”的顺序,但你给出的版本应该可以工作。你应用索引的顺序将决定你是进行行优先还是列优先索引。如果你正在移植Fortran代码(例如),反转“正常”的C顺序可能是有意义的。
是的,假设i
从0到D-1变化,j
从0到H-1变化,k
从0到W-1变化。
通常,拥有索引器的目的是为了表达稀疏矩阵内部的关系,这样您就不需要处理整个矩阵(并为其分配内存)。如果您的数据跨越整个矩阵,您可以考虑将3D矩阵创建为指向指针数组的指针,它们本身又指向指针数组。使用这种方法允许您使用x[i][j][k]
符号,但可能更快。
for i
for j
for k
排序。这样做是最快的,因为数组的索引每次增加一,值可以被预缓存。
没有唯一正确的方法来做到这一点,但你可能选择了最好的方法。