2012-06-15 71 views
2

可能重複:
Accessing elements of a matrix row-wise versus column-wise多立體的陣列迭代效率

在C++中,爲什麼它更有效地通過多維陣列這樣迭代:

// Iterate through the highest dimention last (k) 
int num[10][10][10]; 

for(int i = 0; i < 10; ++i) 
{ 
    for(int j = 0; j < 10; ++j) 
    { 
     for(int k = 0; k < 10; ++k) 
     { 
      cout << num[i][j][k]; 
     } 
    } 
} 

比如此:

// iterate through the highest dimension first (k) 
int num[10][10][10]; 

for(int k = 0; k < 10; ++k) 
{ 
    for(int j = 0; j < 10; ++j) 
    { 
     for(int i = 0; i < 10; ++i) 
     { 
      cout << num[i][j][k]; 
     } 
    } 
} 
+1

可能重複:http://stackoverflow.com/q/4716125/1328439 –

+0

不是一個確切的重複,但接受的答案是優秀的,回答這個問題 – stefaanv

+0

呀,這個問題的答案回答也是我的漂亮多了。所以基本上它的速度更快,因爲數組最後一個維度中的元素在內存中一個接一個地存儲起來,所以如果你遍歷最後一個維度,那麼這些元素就會彼此相鄰,而不是象我的最後一個一樣跳過內存例?此外,每種語言和每個平臺都是如此嗎? – cody

回答

2

這是因爲處理器緩存數據,而像int array[n][m][k]這樣的數組在內存中表示,所以首先存在元素array[0][0][0]array[0][0][k - 1]等等。因此,如果在第一個示例中進行迭代,處理器可以將整個內存加載到緩存中,但在第二個示例中,處理器無法「複製」內存。