环境:xp sp3,vs2008
代码 :
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<int, int> a;
a.insert(pair<int,int>(1,10));
map<int,int>::iterator it = a.begin();
for(; it!=a.end(); it++)
{
if(it->first==1)
{
a.erase(it);
break;
}
}
if(it==a.end())//报错处
a.insert(pair<int,int>(1,10));
}
错误:
Debug Assertion Failed!
Program:e:\hbj\test3\test0321\Debug\test0321.exe
File: e:\program files\microsoft visuall studio 9.0\vc\include\xtree
Line: 304
Expression: map/set iterators incompatible
......
原因: map 是关联容器,对于关联容器来说,如果某一个元素已经被删除,那么其对应的迭代器就失效了,不应该再被使用;否则会导致程序无定义的行为。
解决:将红色代码处换成下面代码
a.erase(it++);
参考:http://hi.baidu.com/dragoo/blog/item/89d7371768ff021e4a90a7ad.html