我正在尝试使用这样的矢量数组:
vector<foo*> *vec = new vector<foo*>(n);
vec的某些位置将为空,其中一些位置稍后将填充一些数据:
vec[i].push_back(&foo_var);
我的问题是vec的空位。让我们说i
等于0
,我没有push_back
任何事情。然后,当我尝试做一些检查时,例如,
vec[0].size();
而不是预期的返回0
,程序返回一个巨大的数字1457283635
。
搜索周围,我发现我应该初始化空位。然后我试试这个:
vector<foo*> vec = new vector<for*>(n);
for(int i = 0; i < n; i++) {
vec[i] = vector<foo*>();
}
...
这个&#34;解决方案&#34;足以使我的程序按预期工作(例如,返回0
作为空位的大小。)
然而,在增加n
的大小后,我的程序现在崩溃了:
vec[i] = vector<foo*>();
程序发送分段错误错误。
答案 0 :(得分:10)
看来你的意思是
vector<foo*> *vec = new vector<foo*>[n];
而不是
vector<foo*> *vec = new vector<foo*>(n);
第一个确实在动态存储器中分配了一个向量数组,而第二个向量分配了一个具有n个元素的向量。 考虑到您可以定义向量向量。例如
std::vector<std::vector<foo *>> vec( n );
答案 1 :(得分:0)
您的意思是创建n
空向量,还是填充n
元素的单个向量?
我假设前者,但是在()
语句中使用new
,您实际上完成了后者,只创建了一个包含n
foo*
元素的向量在它。
您应该使用向量向量来解决这个问题,这样您就不必自己进行内存管理了。
std::vector<std::vector<foo*> > vec(n);
然后,这会创建n
的{{1}}个空向量。
答案 2 :(得分:0)
您的要求是否表明您必须使用动态内存?
如果没有,可能更容易创建为:
vector<foo*> vec;
然后使用vec作为常规&#39;向量变量,而不是使用指针到矢量?
然后更简单(?):
vector<foo*> vec;
foo* pFoo = something;
vec.push_back(pFoo);