📅  最后修改于: 2023-12-03 15:36:16.927000             🧑  作者: Mango
在 C++ 中,我们可以使用标准库中的 vector
来存储和管理序列元素。有时候,我们需要从一个向量中删除一个特定的元素,这就需要用到向量的一些成员函数和算法。
下面是一些从向量中删除元素的方法,每个方法都有不同的应用场景,可以根据具体情况选择使用。
erase
函数erase
函数是向量中用于删除元素的一个成员函数,它可以接受一个迭代器作为参数,用来指定要删除哪个元素。下面是一个例子:
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
v.erase(v.begin() + 2); // 删除第 3 个元素
for (auto i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
这个程序会输出 1 2 4 5
,因为它删除了序列中的第 3 个元素 3
,然后输出了剩余的元素。
remove
和 erase
算法remove
和 erase
是标准库中的两个算法函数,它们通常用于从容器中删除特定元素。这两个函数的组合可以删除向量中所有等于某个值的元素。例如:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {1, 2, 3, 2, 4, 5, 2};
auto iter = std::remove(v.begin(), v.end(), 2); // 移除所有等于 2 的元素
v.erase(iter, v.end()); // 不需要的元素被移动到了向量的末尾,使用 erase 函数删除它们
for (auto i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
此程序会输出 1 3 4 5
。我们可以看到,使用 remove
函数将其转换为以下序列 1 3 4 5 [2 2 2]
,然后使用 erase
删除不需要的部分。
unique
和 erase
算法有时候,我们需要从一个向量中删除相邻的重复元素。这可以使用 unique
和 erase
两个算法函数实现。例如:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {1, 1, 2, 2, 3, 3, 3, 4};
auto iter = std::unique(v.begin(), v.end()); // 移除相邻的重复元素
v.erase(iter, v.end());
for (auto i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
该程序将删除相邻的重复元素并输出序列 1 2 3 4
。
以上就是几种在 C++ 中从向量中删除特定元素的方法。每个方法都有不同的应用场景,我们需要根据实际情况选择合适的方法。
注:本文所述的方法同样适用于其他 C++ 容器,例如 list
和 deque
。