前几天刚写了一篇关于STL迭代器失效的博文(迭代器失效(1)-小心使用STL容器的erase() ),今天又犯了错误,原因是代码结构的复杂性掩盖了迭代器失效的事实。
现把代码层层简化,如下:
#include <vector>
std::vector<int> myVector;
void do_something();
void handleElement(int val);
int main()
{
myVector.push_back(1);
myVector.push_back(2);
myVector.push_back(3);
myVector.push_back(4);
myVector.push_back(5);
do_something();
// handleElement(2);
return 0;
}
void do_something()
{
std::vector<int>::iterator it = myVector.begin();
for (;it != myVector.end(); it++)
{
handleElement(*it);
}
}
void handleElement(int val)
{
std::vector<int>::iterator it = myVector.begin();
while (it != myVector.end())
{