stl 容器的问题 在其他地方移除元素后 另一个地方迭代崩溃
#include <stdio.h>
#include <tchar.h>
#include <map>
using namespace std;
map<int,int> stl_Map;
void RemoveItera(int i)
{
map<int,int>::iterator stl_Iterator = stl_Map.find(i);
stl_Map.erase(stl_Iterator);
}
int main()
{
for (int i = 0;i < 20;i++)
{
stl_Map.insert(make_pair(i,i));
}
map<int,int>::iterator stl_Iterator = stl_Map.begin();
for (;stl_Iterator != stl_Map.end();stl_Iterator++) //移除后这里就挂了
{
if (stl_Iterator->second == 5)
{
RemoveItera(stl_Iterator->first);
}
}
return 0;
}
map<int,int>::iterator stl_Iterator = stl_Map.begin();
for (;stl_Iterator != stl_Map.end();/*stl_Iterator++*/) //移除后这里就挂了
{
if (stl_Iterator->second == 5)
{
// map的erase函数本身就有删除某个迭代器位置的节点的重载形式
//RemoveItera(stl_Iterator->first);
stl_Map.erase(stl_Iterator++);// 这里只能采用后置形式,前置错
}
else
{
++stl_Iterator;// 这里前置后置都可以,但是前置效率高
}
}
for (;stl_Iterator != stl_Map.end();) //移除后这里就挂了
{
if (stl_Iterator->second == 5)
{
stl_Map.erase(stl_Iterator++);
}
else
{
++stl_Iterator;
}
}
map<int,int>::iterator stl_Iterator = stl_Map.begin();
for (;stl_Iterator != stl_Map.end();/*stl_Iterator++*/) //移除后这里就挂了
{
if (stl_Iterator->second == 5)
{
stl_Iterator = stl_Map.erase(stl_Iterator++); // 这里只能采用后置形式,前置错
}
else
{
++stl_Iterator; // 这里前置后置都可以,但是前置效率高
}
}