使用auto关键字填充双索引向量

Using auto keyword to fill doubly-indexed vector

本文关键字:索引 向量 填充 auto 关键字 使用      更新时间:2023-10-16

尝试更好地学习auto关键字。我想使用auto关键字分配一个双索引的vector,但当我打印矢量(应该是所有的0)时,它会打印空白,但要打印矢量的正确"形状"。

MWE:

#include <iostream>
#include <vector>
void DisplayVector(const std::vector<std::vector<double> >& vec)
{
  std::cout << "vector: nn";
  for (auto i : vec)
    {
      for (auto j : i)
        {
          std::cout << j << " ";
        }
      std::cout << "n";
    }
  std::cout << "n";
}
int main()
{
  std::vector<std::vector<double> > vec1, vec2;
  /* what I want to work */
  vec1.resize(5);
  for (auto i : vec1)
    {
      i.resize(3);
    }
  DisplayVector(vec1);
  /* "old" way of doing it */
  vec2.resize(5);
  for (int i = 0; i < 5; ++i)
    {
      vec2[i].resize(3);
    }
  DisplayVector(vec2);
}

这导致

vector: 



vector: 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 

做这件事的正确方法是什么?是首选吗?也接受对代码实现的批评:)

在您的使用中,auto本身将处理值,因此将调整vec1中向量副本的大小。

使用vec1更改循环以使用参考

for (auto &i : vec1)
{
  i.resize(3);
}

还要更改DisplayVector()中的两个循环以使用const auto &const引用,而不是按值)。这不会改变输出,但可以避免复制矢量。

注:v154c1和Neil kirk在评论中说了基本相同的话。