STL partition_copy函数

STL partition_copy函数算法

STL 中 partition_copy() 和 stable_partition() 一样也能按照某个筛选规则对指定区域内的数据进行 “分组”,并且分组后不会改变各个元素的相对位置。

更重要的是,partition_copy() 函数不会对原序列做修改,而是以复制的方式将序列中各个元组 “分组” 到其它的指定位置存储。

STL partition_copy函数详解

头文件

#include <algorithm>

语法

pair<OutputIterator1,OutputIterator2> partition_copy ( InputIterator first, InputIterator last, OutputIterator1 result_true, OutputIterator2 result_false, UnaryPredicate pred);

参数

参数 描述
first 输入迭代器
last 输入迭代器
result_true 输出迭代器,其用于指定某个存储区域,以存储满足筛选条件的数据
result_false 输出迭代器,其用于指定某个存储区域,以存储满足筛选条件的数据
pred 用于指定筛选规则,其本质就是接收一个具有 1 个参数且返回值类型为 bool 的函数。注意,该函数既可以是普通函数,还可以是一个函数对象。

说明

first、last:都为输入迭代器,其组合 [first, last) 用于指定该函数处理的数据区域;

result_true:为输出迭代器,其用于指定某个存储区域,以存储满足筛选条件的数据;

result_false:为输出迭代器,其用于指定某个存储区域,以存储满足筛选条件的数据;

pred:用于指定筛选规则,其本质就是接收一个具有 1 个参数且返回值类型为 bool 的函数。注意,该函数既可以是普通函数,还可以是一个函数对象。

技术细节

该函数还会返回一个 pair 类型值,其包含 2 个迭代器,第一个迭代器指向的是 result_true 区域内最后一个元素之后的位置;第二个迭代器指向的是 result_false 区域内最后一个元素之后的位置。

案例

STL partition_copy函数

使用 STL partition_copy 函数筛选集合

#include <iostream> #include <algorithm> #include <vector> using namespace std; bool mycomp(int i) { return (i % 2) == 0; } int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; std::vector<int> myvector{1, 2, 3, 4, 5, 6, 7, 8, 9}; int b[10] = {0}, c[10] = {0}; pair<int*, int*> result= partition_copy(myvector.begin(), myvector.end(), b, c, mycomp); cout << "b[10]:"; for (int *p = b; p < result.first; p++) { cout << *p << " "; } cout << "\nc[10]:"; for (int *p = c; p < result.second; p++) { cout << *p << " "; } cout << endl; return 0; }

我们在 Linux 下使用 g++ 进行编译,具体命令如下:

g++ partition_copy.cpp -std=c++11

编译后,我们直接运行生成的二进制文件 a.out,如下图所示:

20_STL partition_copy函数.png

我们使用了数组来存储 partition_copy() 函数分组后的数据,当然也可以用容器来存储。

STL partition_copy函数总结

在 STL 中 partition_copy() 和 stable_partition() 一样也能按照某个筛选规则对指定区域内的数据进行 “分组”,并且分组后不会改变各个元素的相对位置。

更重要的是,partition_copy() 函数不会对原序列做修改,而是以复制的方式将序列中各个元组 “分组” 到其它的指定位置存储。