在运行时设置向量向量的大小
Posted
技术标签:
【中文标题】在运行时设置向量向量的大小【英文标题】:Set size of vector of vectors at run time 【发布时间】:2016-05-07 10:17:34 【问题描述】:我想知道,如何。
如果我有固定尺寸,我通常会这样做
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);
但我肯定是错的,因为我得到了错误
分段错误(核心转储)
【问题讨论】:
初始化向量std::vector<:vector>> ref 是为特殊的东西设置尺寸吗? 只是一个小注释 i = 1..5,ref[i] 会出现段错误,索引在 C++ 中从零开始,所以 i 的范围必须是 0..4。 【参考方案1】:我想通过命令行参数获取大小,并以与上面相同的方式推送元素。
在询问i
之前询问用户最大尺寸:
cout << "What is the size of your vector? ";
int size;
cin >> size;
std::vector<std::vector<int>> ref(size);
现在您可以请求i
,将它们与size
核对,然后调用ref[i]
而不会崩溃。
【讨论】:
为什么允许std::vector<std::vector<int>> ref(size);
?为什么不需要动态分配?您能否解释一下或将我链接到合适的问题。【参考方案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);
【讨论】:
【参考方案3】:你一直保持打开状态很好,你只是忘记了初始化。
std::vector<std::vector<int>> ref
编辑:当然,如果你想让 ref 增长,你还需要在其中推回向量:
std::vector<int> v1;
ref.push_back(v1);
那么,
ref[1][0]=23.
【讨论】:
它只适用于一个向量 ref[0] ,之后是terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
。
我提出的解决方案并不神奇。您可以使 ref 增长而无需设置其大小 - 正如所提出问题的最后一部分 - 但当然您需要添加必要的 push_back。以上是关于在运行时设置向量向量的大小的主要内容,如果未能解决你的问题,请参考以下文章
在没有向量、指针的情况下在 C++ 中在运行时增加数组大小 [关闭]