vector erase

vector容器中删除元素需要注意几个新手问题

《1》erase后,end位置发生变化

《2》erase返回其下一个元素

原则:

1.如果只删除其中一个元素,那么可以erase后return,不会有问题

2.如果删除多个元素:

for(vector<int>::iterator iter=vect.begin(); iter!=vect.end(); )
{
     if(*iter == 3)
         iter = vect.erase(iter);
     else
         iter++;
}
《3》也许你看了上面的感觉很简单,不就是那样么。是的,就是这样,但是在我们工作的环境中,不同的应用会让你失去对代码的判断力。
举个例子,上面代码能很好的处理删除动作。也许我就这么copy一下就ok了,no也许功能要求你删除重复元素呢?
如果你现在还没明白,那说明你还没真正理解iter = vect.erase(iter)

vect v;  v.push_back(1);  v.push_back(2);  v.push_back(3);  v.push_back(1);  v.push_back(3);  v.push_back(1);  vect::iterator iterBegin = v.begin(), iterEnd = v.end(), iterNext = iterBegin;  for(; iterBegin != iterEnd; )  {    if(*iterBegin == 1)    {     iterBegin = v.erase(iterBegin);     iterEnd = v.end();    }    else    {     ++iterBegin;    }  }

 for(iterBegin = v.begin(); iterBegin != v.end(); ++iterBegin)  {    printf("%d  ", *iterBegin);  }

答案:自己敲吧(不明白的人当然也是没有动手能力的,机会来了)
 很显然  假如我不是固定删除1,而是动态删除重复的元素,那么隐患就来了
 因为业务数据复杂,考虑维护性最后没用多重循环,用了key做临时缓存比对删除重复元素
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值