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