2

当像这样遍历多维数组时:

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

什么是类型row以及cell为什么必须使用参考?

4

2 回答 2

3

当您不使用引用数组到指针的转换时,就会启动并且是指向两个s ( )row数组的指针类型。然后内部循环是不正确的,因为要使其工作,您需要:intint(*)[2]

  • begin具有返回迭代器的end成员函数的类型,
  • beginend由参数相关查找和返回迭代器找到的自由函数或
  • 对于数组类型,x分别x + bound用于beginend,其中x是范围,bound是数组边界。

int(*)[2]不满足这些条件。OTOH,当您使用 时auto&,您会得到int(&)[2]第三个项目符号。

PS你有太多的初始化程序int[2][2]

于 2013-09-09T20:05:10.983 回答
0

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

于 2013-09-09T19:52:57.100 回答