c++中使用for循环引用2d数组每行的方法



我在练习数组问题,我坚持这一个:

给定2D数组的声明:

int a[][2] = { {2,2}, {3,3}, {4,4} };

写一个嵌套的for循环来打印a的所有值。

首先,由于2D数组是一个行数组(意味着这个数组的每个元素都是一个行向量),

我尝试了一个for循环,像这样:

for (int& x[]: a)
for (int y: x)
cout << y << " ";

外部for循环意味着我想引用a的每一行,给它一个名字"x";内部for循环意味着我要引用x的每个元素,给它一个名字&;y&;

我认为外部for循环中的声明是有效的,因为我指定x为整数类型的数组,但在编译时出现错误。我检查了解决方案,它表明x必须声明为自动类型,这意味着我应该把外循环写成"for(auto& x: a)"。这个解决方案也表明这是唯一的方法,但我不确定这是否是真的。

因此,我想弄清楚几件事:

  1. 为什么当我写"for (int& x[]: a)";?
  2. "行x的数据类型是什么?for (auto& x : a)";?auto检测到什么?
  3. 在这种情况下,使用auto真的是唯一的方法吗?

谢谢!

  1. for (int& x[] : a)x是一个引用数组。引用数组在c++中是不合法的。

  2. 类型为int[2]

  3. 您可以通过写入for (int (&x)[2] : a)来避免auto&x周围的额外括号是至关重要的,没有括号,你有一个引用数组(不合法),有了括号,你有一个对数组的引用。

正如john所说:

#include <iostream>
int a[][2] = { {2,2}, {3,3}, {4,4} };
int main()
{
for (int(&x)[2] : a) // one row at a time
{
for (int x2 : x) // print each col in row
{
std::cout << x2 << " ";
}
std::cout << 'n';
}
}

或者直接使用auto

#include <iostream>
int a[][2] = { {2,2}, {3,3}, {4,4} };
int main()
{
for (auto& x: a) // one row at a time
{
for (auto x2 : x) // print each col in row
{
std::cout << x2 << " ";
}
std::cout << 'n';
}
}

最新更新