📅  最后修改于: 2023-12-03 14:39:50.642000             🧑  作者: Mango
在 C++ 的标准模板库(STL)中,partition_copy()
函数位于 <algorithm>
头文件中,用于将输入范围中的元素根据给定条件,分割为满足条件和不满足条件的两个子范围,并将结果分别复制到目标范围中。
以下是 partition_copy()
函数的语法:
template<class InputIt, class OutputIt1, class OutputIt2, class UnaryPredicate>
std::pair<OutputIt1, OutputIt2> partition_copy(InputIt first, InputIt last, OutputIt1 d_first_true, OutputIt2 d_first_false, UnaryPredicate p);
InputIt
:输入范围的迭代器类型,指向需要分割的元素序列的起始和终点。OutputIt1
:输出范围1的迭代器类型,指向满足条件的元素的目标序列的起始位置。OutputIt2
:输出范围2的迭代器类型,指向不满足条件的元素的目标序列的起始位置。UnaryPredicate
:一元谓词函数(接受单个参数并返回布尔值)类型,用于定义分割条件。partition_copy()
函数将输入范围 [first, last)
中满足条件 p
的元素复制到输出范围 [d_first_true, ...)
中,并将不满足条件的元素复制到输出范围 [d_first_false, ...)
中。函数返回一个 std::pair
对象,包含指向输出范围的末尾迭代器。
以下是使用 partition_copy()
函数的示例代码:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> numbers {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::vector<int> even_numbers;
std::vector<int> odd_numbers;
auto is_even = [](int n) { return n % 2 == 0; };
std::partition_copy(numbers.begin(), numbers.end(), std::back_inserter(even_numbers), std::back_inserter(odd_numbers), is_even);
std::cout << "Even numbers:";
for (const int& num : even_numbers)
std::cout << " " << num;
std::cout << std::endl;
std::cout << "Odd numbers:";
for (const int& num : odd_numbers)
std::cout << " " << num;
std::cout << std::endl;
return 0;
}
输出结果:
Even numbers: 2 4 6 8 10
Odd numbers: 1 3 5 7 9
以上示例代码将从 numbers
向量中复制出所有的偶数到 even_numbers
向量,并复制出所有的奇数到 odd_numbers
向量。
partition_copy()
函数是 C++ STL 中的一个强大工具,用于将序列按照给定条件进行分割,并将结果复制到不同的目标序列中。它可以帮助程序员简化代码,并高效地执行元素分割操作。