【问题标题】:Print the contents of a 2D vector using auto使用 auto 打印 2D 矢量的内容
【发布时间】:2017-05-12 01:50:17
【问题描述】:

我有向量a的向量,我想打印出第一个向量的内容。

a = [ 1 5 3 ; 11 17 14 ]

知道它的大小/尺寸,我可以使用以下方法:

for ( int k = 0; k <= a[0].size(); k++)
    cout << a[0][k] << endl;

我想要的输出是:

1 5 3

但是,在另一个向量在执行期间改变其大小的示例中,我尝试使用以下内容:

for ( auto k : a[0])
    cout << a[0][k] << endl;

但输出如下:

5 0 

如何在不知道向量维度的情况下使用auto 关键字获取第一个向量的元素?

【问题讨论】:

  • 我相信当您使用for ( auto k : a[0] ) 时,k 被分配给向量中的第一个元素,a[0],即 1。因此,a[0][k] 返回a[0][1] 为 5。向前看,a[0][5] 为 0(超出范围),a[0][3] 也为 0(超出范围)。

标签: c++ vector 2d auto


【解决方案1】:

当您使用auto 关键字时,k 被分配给向量中每个元素的,而不是元素的索引。因此,如果你想打印出数组的内容,只需打印出 k:

for ( auto k : a[0] )
    cout << k << endl;

编辑:为清楚起见,它在第一个 for 循环中起作用的原因是因为您将 k 设置为从 0 到 a[0] 中元素数的每个整数,因此是每个元素的索引,而不是价值。

【讨论】:

  • 谢谢。您的答案部分解决了它,因为现在它给出了 [1 5],但缺少向量的最后一个元素。如何打印所有元素?
  • 我本可以在 for 循环之后使用 cout &lt;&lt; a[0][a[0].size()] 来做到这一点,但如果有更自动的方法来做到这一点,我会更喜欢。
  • 我唯一能想到的是,如果您将向量初始化为 2 元素向量。你能发布你的初始化代码吗?
  • 对于这个非常简单的例子,我只使用了以下vector &lt; int &gt; b(2,0); vector &lt; vector &lt;int&gt; &gt; a(3, b);,但在原始代码中它有点复杂。
  • 抱歉耽搁了。问题在于您的初始化。当您初始化向量 b 时,您将其声明为 2 个元素的向量,两个元素的值都为 0。然后您将 a 初始化为 3 个元素的向量,每个元素的值都为 b。因此,您最终会得到这个结构:a = [ [0,0], [0,0], [0,0] ]。如果你只看 a[0],你看到的是一个只有两个元素的向量。
猜你喜欢
  • 2018-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多