c++

c++中remove_if()与remove()有何区别

小樊
82
2024-09-25 05:54:17
栏目: 编程语言

在 C++ 标准库 <algorithm> 中,remove_if()remove() 都是用于处理容器中元素的方法,但它们的实现和行为有所不同。

  1. remove() 方法: remove() 方法用于移除容器中所有等于指定值的元素。它并不真正删除这些元素,而只是将不需要删除的元素移到容器的前面,并返回一个指向“新”末尾的迭代器。要真正删除这些元素,需要使用容器的 erase() 方法。

示例代码:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> v = {1, 2, 3, 2, 4, 2, 5};
    
    auto new_end = std::remove(v.begin(), v.end(), 2);
    
    v.erase(new_end, v.end());
    
    for (int x : v) {
        std::cout<< x << ' ';
    }
    
    return 0;
}

输出:

1 3 4 5
  1. remove_if() 方法: remove_if() 方法用于移除满足指定条件的所有元素。与 remove() 不同,remove_if() 接受一个谓词函数(即一个返回布尔值的函数或函数对象),并使用该谓词函数来判断哪些元素应该被移除。

示例代码:

#include <iostream>
#include <vector>
#include <algorithm>

bool is_even(int x) {
    return x % 2 == 0;
}

int main() {
    std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    
    auto new_end = std::remove_if(v.begin(), v.end(), is_even);
    
    v.erase(new_end, v.end());
    
    for (int x : v) {
        std::cout<< x << ' ';
    }
    
    return 0;
}

输出:

1 3 5 7 9

总结:

0
看了该问题的人还看了