迭代器和向量的Seg错误

Seg fault with iterators and vectors

本文关键字:Seg 错误 向量 迭代器      更新时间:2023-10-16

我似乎在用迭代器显示向量中的项时遇到了问题。可能,我只需要另一双眼睛就可以看到它

vector<string> tempVector;
vector<string>::iterator it;

it = tempVector.begin();
tempVector.push_back("1");
cout << *it;

我知道这不是完整的代码,但这是唯一运行的部分。输出为segfault。迭代器不是指向向量的开头吗?我本以为能拿到1分。

如果对vector::reserve()的调用碰巧需要重新分配,则会使所有现有迭代器失效。

引用C++标准,23.3.6.3[矢量容量]

此时发生重新定位,当且仅当当前容量小于reserve()的参数时。[…]重新定位将使引用序列中元素的所有引用、指针和迭代器无效。

EDIT:编辑后,您将调用vector::push_back(),如果需要重新分配,它还会使所有迭代器无效。迭代器无效规则可能会有所帮助。