【问题标题】:To initialize 2D vector with zero values用零值初始化二维向量
【发布时间】:2021-07-10 19:10:48
【问题描述】:

我想构造一个通过n 的值的二维数组,基本上我正在尝试构造 n*n 数组并希望将所有值分配为零。要做到这一点vector<vector<int> > ans(n, vector<int>(n)); 我正在尝试这样,但是当检查它的大小时,它返回的 n 的值通过了。我期望数组大小为n*n

这样做是否正确?有没有更好的方法。

   int n = 3;
   vector<vector<int> > ans(n, vector<int>(n));//initialize
   cout<<"size before :"<<ans.size()<<endl;

【问题讨论】:

  • 如果您使用调试器的工具检查生成的对象,您会看到什么?
  • @SamVarshavchik 我尝试了打印向量我得到了 9 个零值 for(int i=0; i&lt;ans.size(); i++) { for(int j=0; j&lt;ans[i].size(); j++) { cout&lt;&lt;ans[i][j]&lt;&lt;endl; } }
  • @SamVarshavchik 所以我对向量大小 n*n 的假设是错误的.. 明白了
  • 是什么让你相信这是错误的?您希望得到一个 3x3 数组。那是九个值。您的输出显示九个值。相反,您希望看到什么?
  • 它类似于指向数组的指针数组并且有相同的问题/优点

标签: c++ vector multidimensional-array


【解决方案1】:

您可能想要创建自己的容器类,它可能使用也可能不使用 std::vector 作为存储。并将使用向量或动态分配的一维数组模拟二维数组。这样,您将拥有一个连续的元素序列,您可以在需要时将数据视为一维数组,而无需嘲弄 UB 等。这样的容器实际上存在于许多库中用于此目的,例如Matrix 类在 Eigen 中具有 Dynamic 大小

【讨论】:

    【解决方案2】:
    vector<vector<int> > ans(n, vector<int>(n));
    

    这意味着您将“ans”指定为大小为“n”的向量,其中每个元素都是整数向量。所以当你使用 size() 时,它只会返回 'n',因为 'ans' 只有 'n' 个元素。它不会返回 n * n。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      • 2018-06-26
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      相关资源
      最近更新 更多