std::remove ,std::copy_if ,std::partition,std::unique,std::unique_copy的用法,给出例子
时间: 2023-10-17 09:21:42 浏览: 161
这些都是C++ STL中的算法,用于对容器中的元素进行处理。下面分别给出每个算法的用法和示例:
1. std::remove: 从容器中删除指定的元素
```cpp
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 2, 4, 2, 5};
auto it = std::remove(vec.begin(), vec.end(), 2); // 删除所有值为2的元素
vec.erase(it, vec.end()); // 删除多余的元素
for (auto x : vec) {
std::cout << x << " "; // 输出:1 3 4 5
}
return 0;
}
```
2. std::copy_if: 将符合条件的元素复制到新的容器中
```cpp
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::vector<int> odd_vec;
std::copy_if(vec.begin(), vec.end(), std::back_inserter(odd_vec), [](int x) { return x % 2 == 1; }); // 复制所有奇数到odd_vec中
for (auto x : odd_vec) {
std::cout << x << " "; // 输出:1 3 5
}
return 0;
}
```
3. std::partition: 将容器中的元素按照条件分为两部分,满足条件的在前面,不满足条件的在后面
```cpp
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
auto it = std::partition(vec.begin(), vec.end(), [](int x) { return x % 2 == 1; }); // 将容器中的元素按照奇偶分为两部分
for (auto x : vec) {
std::cout << x << " "; // 输出:1 5 3 4 2
}
return 0;
}
```
4. std::unique: 删除容器中相邻的重复元素
```cpp
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 2, 3, 3, 3, 4, 5, 5};
auto it = std::unique(vec.begin(), vec.end()); // 删除相邻的重复元素
vec.erase(it, vec.end()); // 删除多余的元素
for (auto x : vec) {
std::cout << x << " "; // 输出:1 2 3 4 5
}
return 0;
}
```
5. std::unique_copy: 将容器中相邻的重复元素复制到新的容器中
```cpp
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 2, 3, 3, 3, 4, 5, 5};
std::vector<int> unique_vec;
std::unique_copy(vec.begin(), vec.end(), std::back_inserter(unique_vec)); // 将相邻的重复元素复制到unique_vec中
for (auto x : unique_vec) {
std::cout << x << " "; // 输出:1 2 3 4 5
}
return 0;
}
```
阅读全文