使用范围for语句处理多维数组
在C++11新标准中新增了范围for语句,所以遍历多维数组可以用如下形式:
int num[rowCnt][colCnt]; for(auto &row : num){ for(auto &col : row){ /*要进行的操作*/ } }
严格来说,C++语言中没有多维数组,通常所说的多维数组其实是数组的数组。
比如说 int ia[3][4]; 实际上是定义一个大小为3的数组,数组中的每个元素是一个大小为4的数组。 int ib[10][20][30]; 实际上是定义一个大小为10的数组,它的每个元素都是大小为20的数组,而这些大小为20的数组的元素是大小为30的数组。
所以上面的遍历代码实际上是第一层for循环取外层数组的每个元素,第二层是取内层数组的每个元素。但是要注意:
要使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型。
因为如果上述例子的row不是引用类型,编译器初始化row时会自动将这些数组形式的元素转换成指向该数组内首元素的指针,这样row的类型就是int*,显然内层的循环就不合法了。