STL增减元素对迭代器的影响?

本人微信公众号:CPP进阶之旅
如果觉得这篇文章对您有帮助,欢迎关注 “CPP进阶之旅” 学习更多技术干货

STL增减元素对迭代器的影响?


  说到容器增减元素时,对迭代器的影响,我们需要考虑到连续内存容器和非连续内存容器,在增加和减少元素时对迭代器的影响。

连续内存容器

  对于连续内存容器,如vector、deque等,增减元素均会使得当前迭代器之后的所有迭代器失效。例如,当使用erase()删除元素后,此时的迭代器相当于是指向了被删除元素的下一个元素的有效迭代器。删除元素时常见的编程写法为:

for(auto iter = myvec.begin(); iter != myvec.end()) //另外注意这里用 "!=" 而非 "<"
{
    if(/*满足删除条件*/)
       iter = myvec.erase(iter);
    else 
       ++iter;
}

非连续内存容器

  对于非连续内存容器,如set、map等。增减元素只会使得当前迭代器无效。仍以删除元素为例,由于删除元素后,erase()返回的迭代器将是无效的迭代器。因此,需要在调用erase()之前,就使得迭代器指向删除元素的下一个元素。常见的编程写法为:

for(auto iter = myset.begin(); iter != myset.end()) //另外注意这里用 "!=" 而非 "<"
{
    if(/*满足删除条件*/)
        myset.erase(iter++); //使用一个后置自增就OK了
    else 
        ++iter;
}

重要说明

欢迎关注我的个人微信公众号,查看专业的客户端/服务端开发知识、笔试面试题目、程序员职场经验与心得分享。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值