std::partition 和std::partition_if区别
时间: 2023-09-09 15:12:01 浏览: 48
`std::partition` 和 `std::partition_if` 都是 C++ STL 中的算法,用于将元素按照某个条件划分成两个区间。它们的区别在于条件的表达方式。
`std::partition` 接受一个谓词函数作为参数,将满足谓词条件的元素放在前面,不满足的元素放在后面。例如:
```cpp
bool is_even(int x) {
return x % 2 == 0;
}
int arr[] = {1, 2, 3, 4, 5, 6};
std::partition(std::begin(arr), std::end(arr), is_even);
// arr变为{2, 4, 6, 1, 3, 5}
```
`std::partition_if` 接受一个可调用对象作为参数,该可调用对象需要重载 `operator()`,将满足条件的元素放在前面,不满足的元素放在后面。例如:
```cpp
struct is_greater_than {
int threshold;
bool operator()(int x) const {
return x > threshold;
}
};
int arr[] = {1, 2, 3, 4, 5, 6};
std::partition_if(std::begin(arr), std::end(arr), is_greater_than{3});
// arr变为{4, 5, 6, 1, 2, 3}
```
可以看到, `std::partition_if` 可以通过可调用对象更加灵活地表达条件,而 `std::partition` 则需要传入一个函数指针或函数对象来表示条件。