我想知道,如何在运行时设置矢量矢量的大小。
如果我有固定的尺寸,我通常按
进行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);
但我肯定是错的,因为我收到了错误
分段错误(核心转储)
答案 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.