我想遍历指向对象的指针 vector 。在迭代时,我必须将 vector 的新指针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);
}

最佳答案

当将结果附加到push_back中时, size > capacity 使迭代器无效,因此它将重新分配并复制到新空间。



加上@Jesper指出,您正在vector中存储对局部变量的引用:

int a = 43;
vec.push_back(&a);

如果在vector之前超出范围,则将有悬挂的引用。

关于c++ - C++:在push_back上迭代指针的 vector 时出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58308242/

10-11 22:12
查看更多