【STL源码学习】STL算法学习之三
第一章:前言
数量不多,用到的时候会很爽。
第二章:明细
STL算法中的又一个分类:分割;将已有元素按照既定规则分割成两部分。
is_partitioned
函数原型:
template <class InputIterator, class UnaryPredicate>
bool is_partitioned (InputIterator first, InputIterator last, UnaryPredicate pred);
函数作用:
如果序列被分为两部分,前一部分pred都返回true,后一部分pred都返回false,就表示序列已经被分割,返回true,否则返回false。
函数使用:
其实就是检测迭代器区间是否分为有序且顺序相反的两部分。
partition
函数原型:
template <class ForwardIterator, class UnaryPredicate>
ForwardIterator partition (ForwardIterator first, ForwardIterator last, UnaryPredicate pred);
函数作用:
联系is_partitioned学习,将序列分割成两部分,第一部分pred都返回true,第二部分pred都返回false,返回值为第二部分第一个迭代器。
stable_partition
函数原型:
template <class BidirectionalIterator, class UnaryPredicate>
BidirectionalIterator stable_partition (BidirectionalIterator first, BidirectionalIterator last, UnaryPredicate pred);
函数作用:
将序列分割成两部分,第一部分pred都返回true;第二部分pred都返回false;同时被排序后的各个元素保持了它们之前的顺序(partition则是随机分布的,仅保证分割成有个序列);返回第二部分第一个迭代器。
函数使用:
函数在使用时申请了一块内部存储空间,在多线程编程环境需要谨慎使用,避免内存泄露。
partition_copy
函数原型:
template <class InputIterator, class OutputIterator1,
class OutputIterator2, class UnaryPredicate pred>
pair<OutputIterator1,OutputIterator2>
partition_copy (InputIterator first, InputIterator last, OutputIterator1 result_true, OutputIterator2 result_false, UnaryPredicate pred);
函数作用:
将[first,last)迭代器区间中pred返回true的拷贝给result_true,pred返回false的返回给result_false,函数返回值的pair为<result_true, result_false>两者均为对应迭代器序列的new end。
partition_point
函数原型:
template <class ForwardIterator, class UnaryPredicate>
ForwardIterator partition_point (ForwardIterator first, ForwardIterator last, UnaryPredicate pred);
函数作用:
好奇怪的一个函数呀!
要求迭代器序列必须是partition用同样参数分割过的序列,返回的参数是第二个序列的开始迭代器,没搞明白想实现的是什么功能!
第三章:我有话说
这最后一个函数是干嘛的?明白的提示一下。