当前位置:编程学习 > C/C++ >>

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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,