map<string, string> sMap;
map<string, string>::iterator iter;
for(iter = sMap.begin();iter != sMap.end();/* iter++ */)
{
sMap.erase(iter++);
}
注意下列错误表达:
1.
for(iter = sMap.begin();iter != sMap.end(); iter++ )
{
sMap.erase(iter);
}
错误原因:iter指针在元素被删除后已经失效了,在回到for语句后,无法与sMap.end()进行比较。
2.
for(iter = sMap.begin();iter != sMap.end();/* iter++ */)
{
sMap.erase(iter);
iter++;
}
错误原因:执行完sMap.erase(iter)之后,iter指针已经失效了,无法执行iter++ 。
正确表达中 sMap.erase(iter++);
等价于:
{
map<string, string>::iterator temp;
temp = iter;
iter自增;
sMap.erase(temp);
}
参见:http://blog.csdn.net/liuzhi67/article/details/50950843