簡體   English   中英

3d - > 1D數組索引

[英]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

顯然,根據您訂購DHW (或ijk )的方式,計算會有所不同。

沒有一個“正確”的訂單,但您提供的版本應該有效。 應用索引的順序將決定您是執行行主索引還是列主索引。 如果你正在移植Fortran代碼(例如),那么反轉“正常”C順序是有意義的。

在這種情況下,寬度,高度和深度毫無意義。 您需要知道的是,多維數組以行主順序存儲。

是的,假設i從0 ... D-1變化, j從0 ... H-1變化, k從0 ... W-1變化。

通常,我認為,擁有索引器的目的是在稀疏矩陣內表達關系,這樣你就不需要處理整個事情(並為它消耗內存)。 如果您的數據跨越整個矩陣,您可能會考慮將3d矩陣創建為指向指針數組的指針,指針數組本身指向一個指針數組。 使用此選項可以使用x[i][j][k]表示法,但可能更快。

有關說明,請訪問http://www.nr.com/cpppages/chapappsel.pdf

如果你需要迭代所有元素,最好這樣做

for i
    for j
        for k

訂購。 這樣,它將是最快的,因為數組的索引每次遞增1並且可以預先緩存值。 不僅有一種正確的方法可以做到這一點,但你可能選擇了最好的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM