在运行时设置矢量矢量的大小

时间:2016-05-07 10:17:35

标签: c++ vector initialization

我想知道,如何在运行时设置矢量矢量的大小。

如果我有固定的尺寸,我通常按

进行
std::vector<std::vector<int>> ref(5);

并按

推送特定向量中的元素
ref[i].push_back(23); // i = 0,1,...4

现在如果有兴趣在运行时设置大小,意味着,我想通过命令行参数获取大小,并按照与上面相同的方式推送元素。

我想通过保持打开

来声明向量的向量来做到这一点
std::vector<std::vector<int>> ref;

然后按下元素

ref[i].push_back(23);

但我肯定是错的,因为我收到了错误

  

分段错误(核心转储)

3 个答案:

答案 0 :(得分:3)

  

我希望通过命令行参数获取大小,并以与上面相同的方式推送元素。

在询问i之前询问用户最大尺寸:

cout << "What is the size of your vector? ";
int size;
cin >> size;
std::vector<std::vector<int>> ref(size);

现在,您可以要求i,针对size进行检查,然后在不崩溃的情况下致电ref[i]

答案 1 :(得分:2)

您可以使用std::vector::resize。如果输入大小大于向量的当前大小而不改变向量的内容,则它增加向量的容量。 (它可能会重新分配矢量,但这不会影响您的程序)

按照您的方式初始化矢量:
vector<vector<int> > ref;

现在,当你向后推时,检查i是否在向量的当前大小范围内。如果没有,请调整std::vector的大小,然后调用std::vector::push_back

if(i>=ref.size())
    ref.resize(i);
ref[i].push_back(23);

答案 2 :(得分:0)

你打算保持打开状态,你只会忘记初始化。

std::vector<std::vector<int>> ref{{}}

编辑:当然,如果你想要增长,你还需要在其中推回向量:

std::vector<int> v1;
ref.push_back(v1);

然后,

ref[1][0]=23.