c++ - C++中用for循环引用二维数组每一行的方法

标签 c++ multidimensional-array auto nested-for-loop

我正在练习数组问题,并且坚持了这个:

给定二维数组的声明:

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) ”。 解决方案也表明这是唯一的方法,但我不确定是否正确。

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

  1. 为什么当我写了像“for (int& x[]: a) ”这样的行时它不起作用?
  2. for (auto& x : a)”行中 x 的数据类型是什么? 自动检测到什么?
  3. 在这种情况下使用 auto 真的是唯一的方法吗?

谢谢!

最佳答案

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

  2. 类型为int[2]

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

关于c++ - C++中用for循环引用二维数组每一行的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74405116/

相关文章:

c++ - 读取文件时宏定义的有效方法?

php - 可能的词组

c++ - auto 推导的那个类型是什么?

c++ - CIN 到字符串或 int 变量,然后到重载的构造函数

c++ - 为什么我们需要在 C++20 中的函数概念参数之后使用 auto?

c++ - 从 (x, y) 位置计算网格线 C++

c++ - 我应该通过 API 还是通过项目的源代码本身使用英特尔 Embree?

c++ - 在 C++14 中将模板变量传递给模板函数

php - 无循环按键对多维数组的值求和

c++ - 示例程序崩溃