📅  最后修改于: 2023-12-03 14:39:55.451000             🧑  作者: Mango
在 C++ 中,擦除和删除 (erase and remove) 是两个常见的操作。它们通常用于从容器 (如 vector, list 等) 中删除元素。
擦除操作是指从容器中删除指定位置的元素,它的返回值是指向下一个元素的迭代器。它的形式如下:
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
其中,第一个函数是删除单个元素,第二个函数是删除指定范围内的元素。下面是使用示例:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec{ 1, 2, 3, 4, 5 };
vec.erase(vec.begin() + 2); // 删除第 3 个元素
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " "; // 输出 1 2 4 5
}
std::cout << std::endl;
vec.erase(vec.begin() + 1, vec.end()); // 删除第 2 个元素到末尾的元素
std::cout << vec.size() << std::endl; // 输出 1
return 0;
}
删除操作是指从容器中删除指定值的元素,它会将所有等于该值的元素移动到容器的末尾。它的形式如下:
iterator remove (const value_type& val);
这个函数返回指向被移动元素的最后一个元素的迭代器。为了从容器中真正删除这些元素,我们需要再调用 erase 函数来删除它们,如下面的示例所示:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec{ 1, 2, 3, 2, 4, 2, 5 };
vec.erase(std::remove(vec.begin(), vec.end(), 2), vec.end());
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " "; // 输出 1 3 4 5
}
std::cout << std::endl;
return 0;
}
上面的代码会删除容器 vec 中所有值为 2 的元素。
擦除和删除是容器操作中常见的两种操作,它们的区别在于擦除是通过迭代器直接删除指定位置的元素,而删除是将指定值的元素移动到容器末尾,需要再进行一次擦除操作才能真正删除这些元素。当我们需要删除容器中某个元素时,应该优先考虑使用擦除操作;当我们需要删除容器中所有指定值的元素时,应该使用删除操作。