- remove不能删除元素
vector<int> v;
for (int i = 1; i <= 10; ++i) {
v.push_back(i);
}
cout << v.size(); // 打印10
v[3] = v[5] = v[9] = 99; // 设置3个元素为99
remove(v.begin(), v.end(), 99); // 把所有等于99的元素移到向量末尾,返回一个指向最后一个的下一个“不删除的”元素的迭代器
- earse可以删除元素
iterator erase(iterator position); // 参数为指向相应元素的迭代器
iterator erase(iterator first, iterator last); // 参数为指向一段元素的 开头 的迭代器以及指向结尾元素的 下一个 元素的迭代器
- 结合两者实现删除特定元素
// 删除vector中值为x的元素
vec.erase(remove(vec.begin(), vec.end(), x), vec.end());
- 应用例题 leetcode 26
题目描述:一个有序数列中重复元素只保留一个,对重复的原地移除,返回处理后数列的长度。
解决思路:可以将重复的元素用一个特殊值替代,再统一删除这个特殊值。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size() == 0)
return 0;
int pre = nums[0]; // mark the previous value
for(int i = 1; i < nums.size(); i++)
{
if(nums[i] == pre)
nums[i] = INT_MAX; // replace repeated value
else
{
pre = nums[i];
}
}
nums.erase(remove(nums.begin(), nums.end(), INT_MAX), nums.end());
return nums.size();
}
};