容器操作可能使迭代器失效
向容器中添加或者刪除元素的操作可能使指向容器的指針、引用、迭代器失效。一個失效的指針、引用、迭代器將不再表示任何元素。
- 在向容器添加元素后,如果儲存空間未重新分配,指向插入位置之前的元素的迭代器、指針、引用有效,但指向插入位置之后的將會失效。
- 在從容器刪除元素之后,指向被刪元素之前元素的迭代器、引用、指針仍有效。尾后迭代器也就失效。
所以對容器進行操作之后,對迭代器需要更新。
兩種例子:
- 遍歷時插入元素
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 };