C++ unique and erase问题处理

这一直在玩下面的代码一直都没有解决erase问题,今天再读代码在发现了问题的所在。

 

执行结果:

 

 

 

貌似erase没有工作,即就是没有删除对应的元素。仔细阅读之后才发现,我把一个东西给弄忘记了。

 

unique在之前调用过了,而unique一旦调用那么就会对容器的数据进行排序,这样一来再次调用unique

   //it = strvec.begin();
    //ituniq = unique(it,strvec.end());

时,就会对容器再次排序,而这次的排序是在前一次的基础上排序的,这样一来就会对在容器中出现三次的元素再排将相连的元素放到unique返回的那个迭代器的下面的位置。当我们再使用erase时,就会删除新的unique返回的迭代器所指的位置之后的元素,也就是说在第一次unique得到的迭代器所指位置到新的unique返回的迭代器位置之间的每一个元素可能会与第一个迭代器位置之前的每一个元素相同,即只是在两次unique和一次erase中叫三次出现的元素删除了一个,分隔开了两个。那么没有达到我们的目的。所以上面的代码是不应该要的。去除后就得到了正确的结果。执行结果如图:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值