通过多维数组迭代foreach

时间:2013-09-09 19:50:57

标签: c++ arrays

当迭代遍历多维数组时:

int arr[2][2] = {{6, 7}, {8, 3}, {5, 2}};
for (auto &row : arr) {
    for (auto &cell : row) {
        // code
    }
}

rowcell的类型是什么?为什么必须使用参考?

2 个答案:

答案 0 :(得分:3)

当您不使用引用数组到指针转换时,row是指向两个int s(int(*)[2])数组的类型指针。然后内部循环形成不良,因为要使它工作,你需要:

  • 具有返回迭代器的beginend成员函数的类型,
  • beginend通过参数依赖查找并返回迭代器或
  • 找到的自由函数
  • 对于数组类型,xx + bound分别用于beginend,其中x是范围,bound是阵列绑定。

int(*)[2]没有完整地记录这些条件。 OTOH,当你使用auto&时,你得到int(&)[2]并且第三个子弹适用。

P.S。你有int[2][2]的初始化程序太多了。

答案 1 :(得分:0)

row是一个int的数组。 cell是对int的引用。如果要修改cell的内容,则需要引用,否则循环变量将是副本。