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

c++ map, mutimap删除问题

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

[cpp]
map<string, string>::iterator iter; 
for ( iter = mm.begin();iter != mm.end(); iter ++ ) 

    if ( iter->second == something ) 
    {  www.zzzyk.com
        mm.erase( iter ); 
    } 

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

正确方法:

[cpp] 
for (iter = mm.begin();iter != mm.end();) 

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

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

[cpp]
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 © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,