📜  C++ STL-algorithm.partition_copy()函数(1)

📅  最后修改于: 2023-12-03 14:39:50.642000             🧑  作者: Mango

C++ STL-algorithm.partition_copy()函数

简介

在 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 中的一个强大工具,用于将序列按照给定条件进行分割,并将结果复制到不同的目标序列中。它可以帮助程序员简化代码,并高效地执行元素分割操作。