C++ vector删除符合条件的元素示例分享


在C++中,`std::vector` 并没有直接提供删除所有符合条件元素的成员函数。不过,你可以通过几种方法来实现这个需求。以下是一个示例,展示了如何删除 `std::vector` 中所有满足特定条件的元素。

假设我们有一个 `vector`,并且想要删除其中所有小于某个值(比如 10)的元素。我们可以使用 `std::remove_if` 算法结合 `vector::erase` 方法来完成这个任务。


#include <iostream>
#include <vector>
#include <algorithm> // 引入算法库,因为需要使用 std::remove_if

int main() {
    std::vector<int> vec = {1, 5, 10, 3, 7, 12, 4};

    // 使用 std::remove_if 算法来“移除”所有小于 10 的元素
    // 注意:std::remove_if 实际上并不是删除元素,而是将所有不满足条件的元素移动到vector的起始位置
    // 并返回一个指向新逻辑末尾的迭代器
    vec.erase(std::remove_if(vec.begin(), vec.end(), 
        [](int i) { return i < 10; }), // 这是lambda表达式,用于判断元素是否小于10
        vec.end()); // erase函数使用这个迭代器来删除“被移动”到末尾的元素

    // 输出修改后的vector
    for(int n : vec) {
        std::cout << n << ' ';
    }

    return 0;
}

这段代码首先创建了一个包含整数的 `vector`。然后,它使用 `std::remove_if` 算法来查找所有小于 10 的元素,并将它们“移动”到 `vector` 的末尾(实际上,`remove_if` 通过交换元素位置来实现,并不真正删除它们)。最后,`vector::erase` 方法被用来删除从 `remove_if` 返回的迭代器到 `vector::end()` 之间的所有元素,这些元素现在都是不满足条件的元素。

注意,`std::remove_if` 和 `std::remove` 算法并不改变容器的大小,它们只是重新排列元素。要真正删除元素,需要与 `erase` 方法结合使用。