c++ map, mutimap删除问题

这样删除会导致程序内存覆盖等一系列不可预知的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.
    }
}


 

 

你可能感兴趣的:(c++ map, mutimap删除问题)