[C++]关于vector迭代器失效及其处理办法

本文探讨了在C++中,向容器添加或删除元素如何影响迭代器的有效性。通过具体示例,如遍历过程中插入或删除元素,阐述了迭代器失效的规则及应对策略。特别关注了在容器操作后迭代器的更新方法。

容器操作可能使迭代器失效

向容器中添加或者删除元素的操作可能使指向容器的指针、引用、迭代器失效。一个失效的指针、引用、迭代器将不再表示任何元素。

  • 在向容器添加元素后,如果储存空间未重新分配,指向插入位置之前的元素的迭代器、指针、引用有效,但指向插入位置之后的将会失效。
  • 在从容器删除元素之后,指向被删元素之前元素的迭代器、引用、指针仍有效。尾后迭代器也就失效。

所以对容器进行操作之后,对迭代器需要更新。

两种例子:

  1. 遍历时插入元素

    iter=v.insert(iter,*iter);//想要指向下一个元素,就要跳过当前和被添加的元素

    iter+=2;

  2.   遍历时删除元素

    注意:erase函数返回的就是删除之后的元素的迭代器

    iter=iter.erase(iter);


 

题目描述:Remove Duplicates from Sorted Array

Given a sorted array nums, remove the duplicates in-place such that each element appear only once and return the new length.

题目来源:leetcode

全部代码:

 1 class Solution {
 2 public:
 3     int removeDuplicates(vector<int>& nums) {
 4         vector<int>::iterator itor=nums.begin();
 5         while(itor+1!=nums.end()&&itor!=nums.end())
 6         {
 7             if(*(itor+1)==*itor) 
 8             itor=nums.erase(itor);
 9             else ++itor;
10         }
11         return nums.size();
12     }
13 };

 

转载于:https://www.cnblogs.com/cuphoria/p/9609619.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值