热度 12
2016-3-16 14:35
865 次阅读|
0 个评论
其实C++里面并没有多维数组这个概念;我们说的多维数组,是指数组的数组。 比如: int ia ; int arr = {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 ; //ia是一个二维数组 int (*p) = ia; //p是一个指针,指向4个元素的数组 p = ia ; //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 ; typedef int int_array ; 因此可以有: int_array *p = ia;