使用范围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*,显然内层的循环就不合法了。

posted @ 2018-10-26 18:38  Lightfall  阅读(549)  评论(0编辑  收藏  举报