设为首页 加入收藏

TOP

c++ map, mutimap删除问题
2012-12-06 13:51:05 来源: 作者: 【 】 浏览:342
Tags:  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.

    }

    }

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇数据结构——KMP算法C++版 下一篇子数组的和的最大值

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: