当像这样迭代多维数组时:
int arr[2][2] = {{6, 7}, {8, 3}, {5, 2}};
for (auto &row : arr) {
for (auto &cell : row) {
// code
}
}
row
和 cell
的类型是什么?为什么必须使用引用?
最佳答案
当您不使用引用数组到指针的转换时,row
的类型为指向两个 int
数组的指针 ( int(*)[2]
).内部循环的格式不正确,因为要使其工作,您需要:
- 具有返回迭代器的
begin
和end
成员函数的类型, begin
和end
通过参数相关查找找到的自由函数并返回迭代器或- 对于数组类型,
x
和x +bound
分别用于begin
和end
,其中x
是范围,bound
是数组边界。
int(*)[2]
不满足这些条件。 OTOH,当您使用 auto&
时,您会得到 int(&)[2]
并且第三个项目符号适用。
附注int[2][2]
的初始值设定项过多。
关于c++ - 使用 foreach 迭代多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18705861/