多维数组迭代效率

时间:2012-06-15 13:39:51

标签: c++ arrays

  

可能重复:
  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 个答案:

答案 0 :(得分:2)

这是因为处理器缓存数据,而int array[n][m][k]之类的数组在内存中表示,首先是元素array[0][0][0]array[0][0][k - 1],依此类推。因此,如果您在第一个示例中进行迭代,处理器可以在缓存中加载整块内存,但在第二个示例中,处理器无法复制“通过”内存。