[英]3d -> 1D array indexing
在C ++中,W * H * D大小的3D數組的索引值是多少?
對於特定的i,j,k這是正確的索引:
我* 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
訂購。 這樣,它將是最快的,因為數組的索引每次遞增1並且可以預先緩存值。 不僅有一種正確的方法可以做到這一點,但你可能選擇了最好的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.