【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用同样参数分割过的序列,返回的参数是第二个序列的开始迭代器,没搞明白想实现的是什么功能!

第三章:我有话说

这最后一个函数是干嘛的?明白的提示一下。

时间: 2024-11-05 11:25:25

【STL源码学习】STL算法学习之三的相关文章

STL源码剖析——STL算法之find查找算法

前言 由于在前文的<STL算法剖析>中,源码剖析非常多,不方便学习,也不方便以后复习,这里把这些算法进行归类,对他们单独的源码剖析进行讲解.本文介绍的STL算法中的find.search查找算法.在STL源码中有关算法的函数大部分在本文介绍,包含findand find_if.adjacent_find.search.search_n.lower_bound. upper_bound. equal_range.binary_search.find_first_of.find_end相关算法,下

STL源码剖析——STL算法之merge合并算法

前言 由于在前文的<STL算法剖析>中,源码剖析非常多,不方便学习,也不方便以后复习,这里把这些算法进行归类,对他们单独的源码剖析进行讲解.本文介绍的STL算法中的merge合并算法.源码中介绍了函数merge.inplace_merge.并对这些函数的源码进行详细的剖析,并适当给出使用例子,具体详见下面源码剖析. merge合并算法源码剖析 // merge, with and without an explicitly supplied comparison function. //将两个

STL源码剖析——STL算法之remove删除算法

前言 由于在前文的<STL算法剖析>中,源码剖析非常多,不方便学习,也不方便以后复习,这里把这些算法进行归类,对他们单独的源码剖析进行讲解.本文介绍的STL算法中的remove删除算法,源码中介绍了函数remove.remove_copy.remove_if.remove_copy_if.unique.unique_copy.并对这些函数的源码进行详细的剖析,并适当给出使用例子,具体详见下面源码剖析. remove移除算法源码剖析 // remove, remove_if, remove_co

STL源码剖析——STL算法stl_algo.h

前言 在前面的博文中剖析了STL的数值算法.基本算法和set集合算法,本文剖析STL其他的算法,例如排序算法.合并算法.查找算法等等.在剖析的时候,会针对函数给出一些例子说明函数的使用.源码出自SGI STL中的<stl_algo.h>文件.注:本文的源码非常多,可能后续博文会对这些算法进行归类分析. STL算法剖析 #ifndef __SGI_STL_INTERNAL_ALGO_H #define __SGI_STL_INTERNAL_ALGO_H #include <stl_heap

STL源码剖析——基本算法stl_algobase.h

前言 在STL中,算法是经常被使用的,算法在整个STL中起到非常重要的作用.本节介绍的是一些基本算法,包含equal,fill,fill_n,iter_swap,lexicographical_compare,max,min,mismatch,swap,copy,copy_backward,copy_n.其中一个比较重要的算法就是copy,针对copy的剖析在源码中可以看到详细的注解.本文剖析的源码出自SGL STL中的<stl_algobase.h>文件. 基本算法剖析 #ifndef __

STL源码剖析——STL函数对象

前言 在STL中,函数对象也是比较重要的,有时候可以限定STL算法的行为,例如在前面介绍的<STL算法剖析>中,每个算法基本上都提供了两个操作版本,其中就用一个版本允许用户指定函数对象,这样可以根据用户的需要对算法进行操作.函数对象是一种具有函数特质的对象,所以可以作为算法的参数.本文介绍的函数对象比较简单,是基于一元或者二元操作结构的算术类函数对象.关系运算类函数对象.逻辑运算类函数对象.在定义函数对象时,为了使其具有函数行为,则必须重载operator()操作符.本文源码出自SGI STL

STL源码剖析——STL算法之sort排序算法

前言 由于在前文的<STL算法剖析>中,源码剖析非常多,不方便学习,也不方便以后复习,这里把这些算法进行归类,对他们单独的源码剖析进行讲解.本文介绍的STL算法中的sort排序算法,SGI STL中的排序算法不是简单的快速排序,而是交叉利用各种排序:堆排序.插入排序和快速排序:这样做的目的是提高效率,针对数据量比较大的采用快速排序,数据量比较小的可以采用堆排序或插入排序.注意:STL的sort排序算法的迭代器必须是随机访问迭代器. sort排序算法剖析 // Return a random n

C++ 《STL源码剖析》 deque 学习

Deque 简介 deque是“double—ended queue”的缩写,和vector一样都是STL的容器,deque 是双端数组,而 vector 是单端的. deque 在接口上和 vector 非常相似,在许多操作的地方可以直接替换. deque 可以随机存取元素(支持索引值直接存取,用[]操作符或at()方法,这个等下会详讲). deque 头部和尾部添加或移除元素都非常快速.但是在中部安插元素或移除元素比较费时. 使用时需要包含头文件 #include<deque> . Deq

C++ 《STL源码剖析》学习-vector

本文章是笔者学习<STL源码剖析>的学习笔记,记录的是笔者的个人理解,因为个人的水平有限,难免会有理解不当的地方,而且该书出版的时间比较久,难免会有些不一样.如有不当,欢迎指出. vector是c++中经常用到的数据结构,而且在面试时也会有提及,因此了解vector很重要. 一说到vector,我们就很容易想到另外一个与它十分相似的数据结构,关于它们之间显著的差别,我觉得是在于空间运用的灵活性上.数组是静态的,在声明的时候就要指明其具体的空间大小,而vector是动态的,随着元素的增加,它内部

STL源码剖析之组件

本篇文章开始,进行STL源码剖析的一些知识点,后续系列笔记全是参照<STL源码剖析>进行学习记录的 STL在现在的大部分项目中,实用性已经没有Boost库好了,毕竟STL中仅仅提供了一些容器供编码者实用,Boost库相对而言全面了许多,所以更适合做一些项目的开发.但STL源码中依然有很多我们值得学习,思考的地方,包括现在大部分面试,都会问及到STL的框架源码部分.所以决定将这本书其中重要的几个部分拉出来做个笔记,以加深记忆并和大神们探讨探讨. 先简单介绍一下STL中的大致组成部分,一张图就明了