1

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

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


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

我知道这不是完整的代码,但它是唯一运行的部分。输出是段错误。迭代器不是指向向量的开头吗?我期待得到“1”来计算。

4

1 回答 1

5

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

引用 C++ 标准,23.3.6.3[vector.capacity]

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

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

于 2012-09-20T02:38:21.280 回答