c++ map, mutimap删除问题

来源:互联网 发布:scartch 2.0 for mac 编辑:程序博客网 时间:2024/05/29 05:07

这样删除会导致程序内存覆盖等一系列不可预知的bug

map<string, string>::iterator iter;for ( iter = mm.begin();iter != mm.end(); iter ++ ){    if ( iter->second == something )    {        mm.erase( iter );    }}

原因:当erase掉iter后,继续执行iter++,这个时候就乱套了

正确方法:

for (iter = mm.begin();iter != mm.end();){    if ( iter->second == something )    {        mm.erase( iter++ );    }    else    {        iter++;   // Use Pre Increment for efficiency.    }}


可能有人不理解mm.erase(iter++)
其实和这个是一样的

for (iter = mm.begin();iter != mm.end();){    if ( iter->second == something )    {    map<string, string>::iterator iter_erase;    iter_erase = iter++ //先保存后++再删除        mm.erase( iter_erase );    }    else    {        iter++;   // Use Pre Increment for efficiency.    }}