STL容器的删除操作

今天做一个小程序,居然发现用vector的删除操作时遇到了问题:考虑,当需要遍历容器,并且对其中某些元素进行删除操作,正确的做法是怎样?

首先,容器的删除操作,如vector的erase,其参数为游标类型,直接在遍历过程中利用游标进行删除的话,涉及到游标的移动问题,容易产生越界错误。

直接上例子吧,非常简单:

//////////////////////////////////////////////////////
vector<int>::iterator itr = v.begin();
while( itr!=v.end() )

{
  if( need to delete )

    itr = v.erase(itr);

  else

    itr++;
}

//////////////////////////////////////////////////////
list<int>::iterator itr = lst.begin();
while( itr!=lst.end() )

{
  if( need to delete )

    itr = lst.erase(itr);

  else

    itr++;
}

其原理也非常容易记忆:只要保证在erase元素的时候,新游标通过返回值获取,而不能再自增即可。

 

转载于:https://www.cnblogs.com/haba/p/3411162.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值