remove_if remove_copy remove_copy_if 例子
时间: 2023-11-16 08:04:14 浏览: 83
这三个函数是 STL 算法中用于删除元素的函数。它们的作用分别是:
- `remove_if`:删除满足指定条件的元素,返回指向新的逻辑结尾的迭代器。
- `remove_copy`:将满足指定条件的元素拷贝到另一个容器中,返回指向新的逻辑结尾的迭代器。
- `remove_copy_if`:将不满足指定条件的元素拷贝到另一个容器中,返回指向新的逻辑结尾的迭代器。
下面是它们的用法和示例:
```cpp
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
// remove_if
vector<int> v1{1, 2, 3, 4, 5};
auto it1 = remove_if(v1.begin(), v1.end(), [](int x) { return x % 2 == 0; });
v1.erase(it1, v1.end());
for (int x : v1) {
cout << x << " "; // 输出 1 3 5
}
cout << endl;
// remove_copy
vector<int> v2{1, 2, 3, 4, 5};
vector<int> v3;
remove_copy(v2.begin(), v2.end(), back_inserter(v3), [](int x) { return x % 2 == 0; });
for (int x : v3) {
cout << x << " "; // 输出 1 3 5
}
cout << endl;
// remove_copy_if
vector<int> v4{1, 2, 3, 4, 5};
vector<int> v5;
remove_copy_if(v4.begin(), v4.end(), back_inserter(v5), [](int x) { return x % 2 == 0; });
for (int x : v5) {
cout << x << " "; // 输出 1 3 5
}
cout << endl;
return 0;
}
```
注意,这三个函数并不真正删除容器中的元素,而是返回指向新的逻辑结尾的迭代器。如果要真正删除元素,需要结合容器的 `erase` 函数使用。此外,`remove_copy` 和 `remove_copy_if` 会将满足条件的元素拷贝到另一个容器中,因此要注意目标容器的类型和大小。在示例中,使用了 `back_inserter` 函数将元素插入 `vector` 的尾部。
阅读全文