在C++中,std::vector
是一个动态数组,提供了多种删除元素的方法。以下是几种常见的删除多个对象的方法:
如果你想删除std::vector
中所有等于特定值的元素,可以使用std::remove_if
算法结合erase
方法。
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {1, 2, 3, 2, 4, 2, 5};
int value_to_remove = 2;
// 使用std::remove_if和erase删除所有等于value_to_remove的元素
v.erase(std::remove_if(v.begin(), v.end(), [value_to_remove](int val) { return val == value_to_remove; }), v.end());
// 输出结果
for (int val : v) {
std::cout << val << " ";
}
return 0;
}
如果你想删除满足特定条件的元素,可以使用std::remove_if
算法结合erase
方法,条件可以是一个函数或者lambda表达式。
#include <iostream>
#include <vector>
#include <algorithm>
bool is_even(int n) {
return n % 2 == 0;
}
int main() {
std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// 删除所有偶数元素
v.erase(std::remove_if(v.begin(), v.end(), is_even), v.end());
// 输出结果
for (int val : v) {
std::cout << val << " ";
}
return 0;
}
如果你想删除std::vector
中指定范围内的元素,可以直接使用erase
方法。
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// 删除从索引2到索引5的元素(不包括索引5)
v.erase(v.begin() + 2, v.begin() + 6);
// 输出结果
for (int val : v) {
std::cout << val << " ";
}
return 0;
}
如果你想删除std::vector
中的重复元素,可以使用std::unique
算法结合erase
方法。
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {1, 2, 2, 3, 4, 4, 5};
// 先排序
std::sort(v.begin(), v.end());
// 删除重复元素
v.erase(std::unique(v.begin(), v.end()), v.end());
// 输出结果
for (int val : v) {
std::cout << val << " ";
}
return 0;
}
std::remove_if
和erase
。std::remove_if
和erase
。erase
。std::unique
和erase
。这些方法可以帮助你在std::vector
中高效地删除多个对象。
领取专属 10元无门槛券
手把手带您无忧上云