[C++]關於vector迭代器失效及其處理辦法


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

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

  • 在向容器添加元素后,如果儲存空間未重新分配,指向插入位置之前的元素的迭代器、指針、引用有效,但指向插入位置之后的將會失效。
  • 在從容器刪除元素之后,指向被刪元素之前元素的迭代器、引用、指針仍有效。尾后迭代器也就失效。

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

兩種例子:

  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 };

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM