排序算法是STL算法中相当常用的一个类别,包括部分排序和全部排序算法,依据效率和应用场景进行选择。

明细:

sort

函数原型:
template <class RandomAccessIterator>
 void sort (RandomAccessIterator first, RandomAccessIterator last);
template <class RandomAccessIterator, class Compare>
 void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
函数作用:
第一个重载函数就是从小到大的顺序排序。
第二个重载函数的comp是接受两个参数的函数指针或者函数对象,函数对象是行为类似函数的对象,可以通过comp定义排序方式。
函数使用:
comp不应该改变传入参数,否则结果未知
stable_sort
函数原型:
template <class RandomAccessIterator>
 void stable_sort ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
 void stable_sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
函数作用:
基于sort功能,如果两个元素相等,则保留他们排序之前的序列。
partial_sort
函数原型:
template <class RandomAccessIterator>
 void partial_sort (RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last);
template <class RandomAccessIterator, class Compare>
 void partial_sort (RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, Compare comp);
函数作用:
对[first,last)区间的元素部分排序,比*middle小的元素按照升序排列在前面,比*middle大的元素不做排序复制到区间的后半部分。
第一个重载用操作符’<’进行比较,第二个重载用comp进行比较。
partial_sort_copy
函数原型:
template <class InputIterator, class RandomAccessIterator>
 RandomAccessIterator
   partial_sort_copy (InputIterator first,InputIterator last, RandomAccessIterator result_first, RandomAccessIterator result_last);
template <class InputIterator, class RandomAccessIterator, class Compare>
 RandomAccessIterator
   partial_sort_copy (InputIterator first,InputIterator last, RandomAccessIterator result_first, RandomAccessIterator result_last, Compare comp);
函数作用:
将[first,last)区间的最小的元素拷贝至result_first-result_last的区间。
第一个重载用操作符’<’进行比较,第二个重载用comp进行比较。
函数使用:
result_first和result_last需要事先指定。
is_sorted
函数原型:
template <class ForwardIterator>
 bool is_sorted (ForwardIterator first, ForwardIterator last);
template <class ForwardIterator, class Compare>
 bool is_sorted (ForwardIterator first, ForwardIterator last, Compare comp);
函数作用:
如果区间元素按照升序进行排列,就返回true,否则返回false。
第一个重载版本用操作符’<’进行比较,第二个重载版本用comp(通过自定义的comp可以实现降序排列返回true)进行比较。
is_sorted_until
函数原型:
template <class ForwardIterator>
 ForwardIterator is_sorted_until (ForwardIterator first, ForwardIterator last);
template <class ForwardIterator>
 ForwardIterator is_sorted_until (ForwardIterator first, ForwardIterator last, Compare comp);
函数作用:
返回一个迭代器,该迭代器指向第一个没有按照升序排列的元素。
第一个重载版本用操作符’<’进行比较,第二个重载版本用comp(通过自定义的comp可以实现降序排列返回true)进行比较。
nth_element
函数原型:
template <class RandomAccessIterator>
 void nth_element (RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last);
template <class RandomAccessIterator, class Compare>
 void nth_element (RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp);
函数作用:
部分排序函数,排序后的序列具有以下特点:
1. nth位置上的元素必定是按照序列应该在那里的元素,即升序(默认)的第n个元素。
2. nth之前的元素都不大于nth位置的元素,nth之后的元素都不小于nth位置的元素。
重载函数参见其他的排序函数,默认是升序排列,可以指定自己的排序规则。

【STL源码学习】STL算法学习之四的更多相关文章

  1. STL源码剖析:算法

    启 算法,问题之解法也 算法好坏的衡量标准:时间和空间,单位是对数.一次.二次.三次等 算法中处理的数据,输入方式都是左闭又开,类型就迭代器, 如:[first, last) STL中提供了很多算法, ...

  2. STL源码剖析之组件

    本篇文章开始,进行STL源码剖析的一些知识点,后续系列笔记全是参照<STL源码剖析>进行学习记录的 STL在现在的大部分项目中,实用性已经没有Boost库好了,毕竟STL中仅仅提供了一些容 ...

  3. 【STL源码学习】STL算法学习之二

    第一章:前言 学习笔记,记录学习STL算法的一些个人所得,在以后想用的时候可以快速拾起. 第二章:明细 copy 函数原型: template <class InputIterator, cla ...

  4. 《STL源码剖析》学习之traits编程

    侯捷老师在<STL源码剖析>中说到:了解traits编程技术,就像获得“芝麻开门”的口诀一样,从此得以一窥STL源码的奥秘.如此一说,其重要性就不言而喻了.      之前已经介绍过迭代器 ...

  5. stl源码学习(版本2.91)--list

    stl源码学习(版本2.91)--list 一,阅读list()构造函数的收获 1,默认构造函数的作用和被调用的时机 struct no{ no(int i){} //no(){ // std::co ...

  6. c++ stl源码剖析学习笔记(一)uninitialized_copy()函数

    template <class InputIterator, class ForwardIterator>inline ForwardIterator uninitialized_copy ...

  7. 【STL源码学习】std::list类的类型别名分析

    有了点模板元编程的traits基础,看STL源码清晰多了,以前看源码的时候总被各种各样的typedef给折腾得看不下去, 将<list>头文件的类继承结构简化如下 #include < ...

  8. STL源码剖析--迭代器(转)

    一.为什么需要traits编程技术 前面说了很多关于traits的光荣事迹,但是却一直没有介绍traits究竟是个什么东西,究竟是用来干什么的?traits在英文解释中就是特性,下面将会引入trait ...

  9. STL源码--iterator和traits编程技法

    第一部分 iterator学习 STL iterators定义: 提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表达方式. 任何iteartor都应该提供5 ...

  10. STL源码剖析 迭代器(iterator)概念与编程技法(三)

    1 STL迭代器原理 1.1  迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型,STL设计的精髓在于,把容器(Containers)和算法(Algorithms)分开,而迭代器(i ...

随机推荐

  1. P151、面试题27:二叉搜索树与双向链表

    题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向.(本质是中序遍历)二叉树结点的定义如下:struct BinaryTreeNod ...

  2. C#中配置文件的使用

    1. 向项目添加app.config文件: 右击项目名称,选择“添加”→“添加新建项”,在出现的“添加新项”对话框中,选择“添加应用程序配置文件”:如果项目以前没有配置文件,则默认的文件名称为“app ...

  3. gdb调试SAPI方式的php

    一.修改php-fpm.conf文件 /usr/local/php/etc/php-fpm.conf pm.max_children = 1 #只产生一个进程,便于追踪 二.得到进行服务的进程号 [r ...

  4. 【待填坑】bzoj上WC的题解

    之前在bzoj上做了几道WC的题目,现在整理一下 bzoj2115 去膜拜莫队的<高斯消元解xor方程组> bzoj2597 LCT维护MST bzoj1758 分数规划+树分治+单调队列 ...

  5. EXCEL VB

    全面控制 Excel首先创建 Excel 对象,使用ComObj:Dim ExcelID as Excel.ApplicationSet ExcelID as new Excel.Applicatio ...

  6. 自定义Sharepoint的登陆页面

    转:http://www.cnblogs.com/jecoso/archive/2008/05/25/1207151.html 原文作者:Damon Armstrong 原文地址:http://www ...

  7. android中常用的弹出提示框

    转自:http://blog.csdn.net/centralperk/article/details/7493731 我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的 ...

  8. NGINX(四)配置解析

    前言 nginx配置解析是在初始化ngx_cycle_t数据结构时,首先解析core模块,然后core模块依次解析自己的子模块. 配置解析过程 nginx调用ngx_conf_parse函数进行配置文 ...

  9. QTP、LoadRunner、QC工具下载地址

    QTP10.0工具下载地址:http://h30302.www3.hp.com/prdownloads/T6510-15063.zip?ordernumber=380454070&itemid ...

  10. Spring 拦截器配置

    Spring interceptor拦截器配置 Spring mvc的拦截器是通过handlerinterceptor来实现的 实现方式: 1.自定义一个类实现Spring的handlerinterc ...