vector、map删除当前记录

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

posted @ 2017-02-08 10:44  那一剑的風情  阅读(339)  评论(0编辑  收藏  举报