今天做leetcode遇到的一个题:
int removeElement(vector<int>& nums, int val) {
int size = nums.size();
for(vector<int>::iterator it = nums.begin(); it!=nums.end(); )
{
if(*it == val)
{
size--;
it = nums.erase(it);
}
else
++it;
}
return size;
}
注意:vector进行erase操作!
在erase操作后,没有将循环变量i指向修改后的向量迭代器,就继续循环,再与end()比较时断言出现。
解决方法是将“vector.erase(i);”替换为“i = vector.erase(i);”,这是因为STL里的所有容器类中的erase实现都会返回一个迭代器,这个迭代器指向了“当前删除元素的后继元素,或是end()”。