【问题标题】:Initialilze an array of vectors with zeros in C++在 C++ 中用零初始化一个向量数组
【发布时间】:2023-03-04 14:07:01
【问题描述】:

我想要一个向量数组,其中 0 作为所有单个向量中的单个元素。有没有更有效的方法?这行得通吗?

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){

        int lastAnswer = 0;
        int n,q;
        cin >> n >> q;
        vector<int> seqArr[n];
        for(int i=0;i<n;i++)
        {
                fill(seqArr[i].begin(),seqArr[i].end(),0);
        }
return 0;
}

【问题讨论】:

  • 它不起作用。
  • 介意解释一下吗?
  • 确实,因为向量的大小是0。你可以使用seqArr[i].push_back(0);而是。
  • vector&lt;int&gt; seqArr[n]; 需要可变长度数组 (VLA),这是 C11 中 C++ 中不可用的特性
  • 你为什么不试试vector&lt;vector&lt;int&gt; &gt;

标签: c++ c++11


【解决方案1】:

如果你想要一个可变长度的数组,你应该使用一个向量:

vector<vector<int>> seqArr(n);
for (int i = 0; i < n; ++i)
{
    seqArr[i].push_back(0);
}

或者干脆

vector<vector<int>> seqArr(n, vector<int>(1, 0));   // n vectors with one element 0

Variable-Length-Array (VLA) 是 C99 功能,在 C++ 中不可用。在 C++ 中,数组的大小必须在编译时就知道。

【讨论】:

    【解决方案2】:

    由于可变长度数组不是 c++ 的一部分,我建议使用向量向量,这也解决了您的初始化问题:

     vector<vector<int>> sequArray(n,{0}); //vector of n vectors, each containing a single 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-19
      • 2016-12-17
      • 1970-01-01
      • 2015-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-31
      相关资源
      最近更新 更多