2

可能重复:
按行与按列访问矩阵的元素

在 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];
        }
    }
}
4

1 回答 1

2

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

于 2012-06-15T13:43:24.193 回答