在写删除vector链表中重复元素问题时,使用迭代器遇到以下问题:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
for(vector<int>::iterator iter=nums.begin();iter!=nums.end();++iter)
{
if(*(iter)==*(iter+1))
{
nums.erase(iter);
}
}
return 1;
}
};
这里的代码遇到的问题就是iter变为野指针了,并且在for循环中引入了*(iter+1)需要考虑到迭代器越界的问题。
正确的代码修改如下:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
for(vector<int>::iterator iter=nums.begin();iter!=nums.end()-1;++iter)
{
if(*(iter)==*(iter+1))
{
iter=nums.erase(iter);
if(iter!=nums.begin())
{
--iter;
}
}
}
return 1;
}
};
将iter=nums.erase(iter),此时iter为erase的后面一个迭代器。且–iter与iter+1均要考虑到iter是否越界的问题。