c++ map, mutimap删除问题

本文详细探讨了C++中map容器迭代器的使用及其潜在问题,特别是删除元素后的迭代器行为,提出了避免混乱的方法,并通过实例演示了正确的实现方式。

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


 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值