原创 【博客大赛】《C++ Primer》学习笔记(十二)多维数组

2016-3-16 14:35 843 12 12 分类: MCU/ 嵌入式 文集: Qt和Cpp
其实C++里面并没有多维数组这个概念;我们说的多维数组,是指数组的数组。
比如:
int ia[3][4];
int arr[10][20][30] = {0};

使用双层嵌套的for循环处理多维数组,是很常见的方法。
使用range for也可以:

size_t cnt = 0;
for (auto &row : ia)
    for (auto &col : row) {
        col = cnt;
        ++cnt;
    }
}

即使我们不需要更改元素的值,也最好使用reference。
我们这样做,是为了避免将对矩阵的操作转换成了对指针的操作,要不然row就是指针了。
指针本身没有元素这一说,自然也就不能做range for操作。

因此除了最里层的for可以使用原来的值,其他的层都使用引用吧。

如果我们使用数组的名字,那么这个名字默认就是指向它的第一个元素的指针。
比如:
int ia[3][4];      //ia是一个二维数组
int (*p)[4] = ia;  //p是一个指针,指向4个元素的数组
p = &ia[2];        //p现在指向ia的最后一个元素

这里可以使用begin和end函数,获取首尾地址:
for (auto p = begin(ia); p != end(ia); ++p)
    for (auto q = begin(*p); q != end(*p); ++q)
        count << *q << endl;

----------------
为了简化各种数组、指针和引用的表达,可以使用类型别名:
using int_array = int[4];
typedef int int_array[4];
因此可以有:
int_array *p = ia;

文章评论0条评论)

登录后参与讨论
我要评论
0
12
关闭 站长推荐上一条 /2 下一条