vector--迭代器iterator使用技巧

本文详细介绍了迭代器的工作原理,包括包装智能指针的重载操作,以及如何安全地在C++容器如vector中使用迭代器进行遍历和元素插入。特别强调了迭代器失效问题和避免方法。
摘要由CSDN通过智能技术生成

迭代器原理

包装的智能指针,重载了operator * operator->

迭代器的使用

1. 遍历容器

 vector<int> vi = {1,2,3,4,5};
 vector<int>::iterator itr;
 for(itr = vi.begin();itr != vi.end();++itr) {
 	cout<<*itr<<endl;
 }

2. 迭代器作为索引插入或者删除元素时,需谨慎使用,避免迭代器失效

实例

例:在vector下标为0或者偶数时插入元素10

分析:
insert 做参数范围值,指向新插入的元素
Only the first version returns a value, which is an iterator that points to the newly inserted element.
若 itr+1后,itr指向100,再itr++, itr指向为1 ,则重复循环操作,程序挂掉
所以使用迭代器时要注意。

代码实现:

	vector<int> vi = {1,2,3,4,5};
	vector<int>::iterator itr;
    for(itr = vi.begin();itr != vi.end();) {
        if((*itr)%2) {
            itr = vi.insert(itr,100);
            itr += 2;  // itr +2 的原因为 若itr+1后指向1,则由循环,itr+1后又指向1
        }
        else {
            ++itr;
        }

    }
    for(auto &i:vi)
        cout<<i<<endl;

运行结果:
100
1
2
100
3
4
100
5

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八月的雨季997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值