文章目录
- 使用范围for语句处理多维数组
使用范围for语句处理多维数组
举个例子,使用范围for语句输出多维数组(ia)所有值:
for (const auto &row : ia)for (auto col : row)cout << col << endl;
本循环中并没有任何写操作,可仍将外层循环的控制变量声明成了引用类型,这是为了避免数组被自动转换成指针。如果不用引用类型,则循环如下述形式:
for (auto row : ia)for (auto col : row)
程序无法通过编译。第一个循环想要遍历ia的所有元素(实际上是大小为4的数组),但由于row不是引用类型,所以编译器初始化row时会自动将这些数组形式的元素转换成指向数组内首元素的指针。这样得到的row类型就是int*,显然内层循环“for (auto col : row)”就不合法了,其含义成了编译器试图在一个int*内遍历,和程序的初衷相去甚远。
因此,要使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型。