std::remove_if 详细用法
时间: 2023-10-18 19:04:43 浏览: 97
`std::remove_if` 是 STL 中的一种算法,它可以用于删除容器中满足某个条件的元素。
它的函数签名如下:
```c++
template<class ForwardIt, class UnaryPredicate>
ForwardIt remove_if(ForwardIt first, ForwardIt last, UnaryPredicate p);
```
其中,`first` 和 `last` 分别表示要进行处理的元素范围,`p` 是一个函数对象,用于判断某个元素是否应该被删除。函数返回值是一个指向被删除元素之后位置的迭代器。
使用 `std::remove_if` 的一般流程如下:
1. 定义一个函数对象或 lambda 表达式,判断某个元素是否应该被删除;
2. 调用 `std::remove_if` 函数,传递要处理的元素范围和判断函数;
3. 根据返回值,使用容器的 `erase` 函数删除被标记为要删除的元素。
下面是一个示例代码:
```c++
#include <algorithm>
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v{1, 2, 3, 4, 5};
auto is_odd = [](int x) { return x % 2 == 1; };
auto it = std::remove_if(v.begin(), v.end(), is_odd);
v.erase(it, v.end());
for (auto i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
}
```
上面的代码中,我们定义了一个 lambda 表达式 `is_odd`,用于判断一个整数是否为奇数。然后我们调用 `std::remove_if` 函数,将要处理的元素范围和判断函数传递进去,得到一个指向被删除元素之后位置的迭代器。最后,我们使用容器的 `erase` 函数,删除被标记为要删除的元素,输出剩余的元素。
阅读全文