c++ - 在 C++ 中,这是顺序访问二维数组的方式(内存块方式)

标签 c++ arrays

编辑:我从问题标题中删除了 faster/more efficient ,因为它具有误导性。我的意图不是优化而是理解数组。抱歉给您带来麻烦!

int array[10][10], i, j;

for(i=0;i<10;i++)
{
    for(j=0;j<10;j++)
        std::cin>>array[i][j];
}

对比

int array[10][10], i, j;

for(i=0;i<10;i++)
{
    for(j=0;j<10;j++)
        std::cin>>array[j][i];
}

我很确定答案与数组在硬件级别上的实现方式有关; [ ][ ] 语法只是程序员帮助可视化/建模的抽象。但是,我忘记了上面哪段代码是从开始到结束顺序访问内存块的...

谢谢大家的回答...

只是为了确认我的理解,这是否意味着第一个代码等同于

int array[10][10], k;

for(k=0;k<100;k++)
{
    std::cin>>*(array+k);
}

最佳答案

除了等待获取用户输入比数组访问慢得多这一事实之外,第一个更快。

查看 this page on 2D array memory layout如果您想了解有关该主题的更多背景信息。

对于第二个,您正在检查 A[0]、A[10] ... A[1]、A[11]。

第一个顺序是 A[0], A[1], A[2] ..

关于c++ - 在 C++ 中,这是顺序访问二维数组的方式(内存块方式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/890961/

相关文章:

C++:抛出派生的shared_ptr并捕获基的shared_ptr?

c++ - 如何在 Q3DSurface 中为每个 QSurfaceDataRow 设置不同的颜色?

java - 找到未排序数组中所有缺失数字的最快方法是什么

php - 获取分组的 HTML 数据到 PHP 数组? (比如复选框的子元素)

javascript - 1000 个元素的数组中的 50 个随机唯一元素?

c++ - 在 C++ 中将 Apache Arrow Table 转换为 RecordBatch

c++ - 如何在 C++ 中比较二维数组的行和列?

arrays - 如何将一列以逗号分隔的字符串转换为字符串数组

javascript - Pentaho 勺子 : JavaScript split is only putting one element in array

c++ - 矩阵乘法及其转置