class Solution {
public:
int removeDuplicates(vector<int>& nums) {
vector<int>::iterator it=nums.begin();
vector<int>::iterator it_1 = it;
it_1++;
while(it != nums.end() && it_1 != nums.end()){
if(*it_1 == *it){
it = nums.erase(it);
}
else{
it++;
it_1++;
}
}
return nums.size();
}
};
对于迭代器的erase()方法,要注意
1、删除该迭代器所指向位置的元素,并返回一指向其下一位置的新迭代器。可以理解为原来的迭代器已经被删除,要给新迭代器赋值
2、erase方法使用完后,所删除元素位置后面的所有其他迭代器均自动指向其原指向元素的下一个元素。
3、迭代器最好用自加(++)操作
疑问:c++primer书上说,所有指向删除点之后位置的迭代器、指针和引用都会失效。但是发现结果是上述2所说的情况。