多维数组上循环的C++11范围
C++11 range-for loop over multidimensional array
我要从C(ANSI)跳到C++11中。这确实是一个奇怪的世界。
我正在努力解决以下问题:
int tbl[NUM_ROWS][NUM_COLS] = { 0 };
for (auto row : tbl)
for (auto col : row) // ERROR - can't iterate over col (type int *)
// do stuff
我猜,这里的有理数相当于(在C中):之间的差
int v[] = { 1, 2, 3, 4, 5 };
int *u = v;
// (sizeof v) != (sizeof u);
然而,我不太明白以下是如何工作的:
int tbl[NUM_ROWS][NUM_COLS] = { 0 };
for (auto &row : tbl) // note the reference
for (auto col : row)
// do stuff
从逻辑上讲,我认为auto
被类型化为int * const
——这就是"数组"变量的含义,一个指向(可能)非常量元素的常量指针。但是,这怎么比普通指针更容易迭代呢?或者,由于row
是一个引用,它实际上是对int [NUM_COLS]
的类型,就像我们将row
声明为int row[NUM_COLS]
一样?
C++中没有"多维数组"。只有数组。但是,数组的元素类型本身可以是数组。
如果说for (auto x : y)
,则x
是range元素的副本。但是,无法复制数组,因此当y
是数组值数组时,这是无效的。相比之下,形成对数组的引用是非常好的,这就是for (auto & x : y)
工作的原因。
也许这有助于拼写类型:
int a[10][5]; // a is an array of 10 elements of int[5]
for (int (&row)[5] : a)
for (int & cell : row)
cell *= 2;
相关文章:
- C ++枚举范围无法使用-std=c ++ 98进行编译,但使用-std=c ++ 11可以
- C++11 基于范围的 for 循环,用于 std::list
- C++11:没有复制构造函数的自定义基于范围的循环
- 如何在C++11中区分填充构造函数和范围构造函数
- 自动和范围内 for 循环 C++11 不起作用
- 带钥匙的C 11地图定义了一个值范围
- 为什么即使在启用 C++11 并且我包含字符串之后,'stod'仍然没有在此范围内声明?
- C++11 迭代器和返回的 std::unique_ptr 的范围
- C++11:用容器参数定义函数(类似于基于范围的)
- GCC 4.4 不实现 C++11 范围循环.它还支持哪些其他范围循环语法
- 嵌套c++11范围循环,用于查找组合
- 使用基于C++11范围的循环验证数组值?[无矢量]
- 基于C++11范围的自动循环(按值、引用和指针)
- 使用对指针的引用作为循环C++11范围内的序列
- 从矢量中删除项目,而在 C++11 范围内'for'循环?
- 在基于 C++11 范围的'for'循环中获取对 STL 容器元素的引用
- C++11范围内的随机数和显式相似性
- 多维数组上循环的C++11范围
- 关于循环和迭代器的c++11范围
- C++11 范围超过 "tuple"