阅读量:0
在 C++ 标准库 <algorithm>
中,remove_if()
和 remove()
都是用于处理容器中元素的方法,但它们的实现和行为有所不同。
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
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
总结:
remove()
用于移除等于指定值的元素,而remove_if()
用于移除满足指定条件的元素。remove()
和remove_if()
都不会真正删除元素,而是将不需要删除的元素移到容器的前面。要真正删除这些元素,需要使用容器的erase()
方法。remove_if()
更加灵活,因为它可以接受任何满足要求的谓词函数。