我正在练习数组问题,并且坚持了这个:
给定二维数组的声明:
int a[][2] = { {2,2}, {3,3}, {4,4} };
编写一个嵌套的 for 循环来打印 a 的所有值。
首先,由于二维数组是一个行数组(意味着该数组的每个元素都是一个行 vector ),
我尝试了这样的 for 循环:
for (int& x[]: a)
for (int y: x)
cout << y << " ";
外部的for循环意味着我想引用a的每一行,给它一个名字“x”; 内部 for 循环意味着我想引用 x 的每个元素,给它命名为“y”。
我认为外部 for 循环中的声明是有效的,因为我将 x 指定为整数类型的数组,但编译时出现错误。
我检查了解决方案,它表明 x 必须声明为 auto 类型,
这意味着我应该将外循环写为“for(auto& x: a)
”。
解决方案也表明这是唯一的方法,但我不确定是否正确。
因此,我想弄清楚几件事:
- 为什么当我写了像“
for (int& x[]: a)
”这样的行时它不起作用? - “
for (auto& x : a)
”行中 x 的数据类型是什么? 自动检测到什么? - 在这种情况下使用 auto 真的是唯一的方法吗?
谢谢!
最佳答案
在
for (int& x[] : a)
中,x
是一个引用数组。引用数组不是合法的 C++。类型为
int[2]
。您可以通过编写
for (int (&x)[2] : a)
来避免auto
。&x
周围的额外括号至关重要,没有括号,您将拥有一个引用数组(不合法),而有了括号,您将拥有对数组的引用。
关于c++ - C++中用for循环引用二维数组每一行的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74405116/