可是我现在在ubuntu下调用map的erase函数后,iterator却没有失效,erase后还可以访问原来指向的数据。但是循环结束后重新遍历时,又都删除掉了。请问这是怎么一回事呀? 我是用g++编译得,谢谢各位解答了。
代码: 全选
#include <iostream>
#include <map>
#include <iterator>
using namespace std;
int main()
{
map<int, char> testlist;
testlist.insert(make_pair(1, 'a'));
testlist.insert(make_pair(2, 'b'));
testlist.insert(make_pair(3, 'c'));
testlist.insert(make_pair(4, 'd'));
map<int, char>::iterator iter;
for(iter = testlist.begin(); iter != testlist.end(); iter++)
{
cout<<"list:"<<iter->first<<":"<<iter->second<<endl;
testlist.erase(iter);
cout<<"again:"<<iter->first<<":"<<iter->second<<endl;
}
for(iter = testlist.begin(); iter != testlist.end(); iter++)
{
cout<<"list:"<<iter->first<<":"<<iter->second<<endl;
testlist.erase(iter);
cout<<"again:"<<iter->first<<":"<<iter->second<<endl;
}
return 0;
}