对于字符串的操作最常用的是双指针。
问题
想到vector容器的erase()方法可以删除元素,但是实践中踩了一个大坑——erase()不能删除连续相同的两个元素
- 原因在于——erase操作传入迭代器,迭代器所指位置在删除前后不发生改变,改变的只是容器中元素值。删除该元素后,被删元素后面的所有元素复制到被删元素位置上,尾部迭代器也移动到新的尾部位置。
解决
- 当
nums.erase(it)
之后,it就变成了一个野指针,使用it = nums.erase(it);
避免出现野指针。 - 删除最后一个元素时在
nums.end()
上执行 ++ 操作,会出现错误。加入if判断解决。
if (val == *it)
it = nums.erase(it);