我想遍历指向对象的指针向量。在迭代时,我必须将向量的新指针push_back回退。在循环之前,push_backs的数目是未知的,并且没有中止条件,所以我不能使用while循环。
以下是在整数上使用指针的示例,该示例显示的错误与带有对象的版本相同:一次迭代后出现分段错误(内核已转储)。
vector<int*> vec;
int a = 43;
vec.push_back(&a);
for (vector<int*>::iterator it = vec.begin(); it != vec.end(); ++it) {
cout << *(*it) << " " << *it << endl;
vec.push_back(&a);
}
相同的代码但带有整数的效果很好。
vector <int>vec;
int a = 43;
vec.push_back (a);
for (vector < int >::iterator it = vec.begin (); it != vec.end (); ++it){
cout << (*it) << " " << *it << endl;
vec.push_back (a);
}
答案 0 :(得分:3)
push_back
在将结果附加到size > capacity
中时使迭代器无效,因此它会重新分配并复制到新空间。
将给定的元素值追加到容器的末尾。
1)新元素被初始化为value的副本。
2)值已移到新元素中。
如果新的size()大于capacity(),则所有迭代器和 引用(包括过去的迭代器)无效。 否则,只有过去的迭代器才无效。
加上@Jesper指出,您正在vector
中存储对局部变量的引用:
int a = 43;
vec.push_back(&a);
如果在您的vector
之前超出范围,您将有悬挂的引用。