排序算法是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. Tableau

    http://tableau.analyticservice.net/desktop.html

  2. Android开发之MediaPlayer类

    官网关于MediaPlayer类的使用简介:

  3. 函数flst_init

    /** The null file address */UNIV_INTERN fil_addr_t fil_addr_null = {FIL_NULL, 0}; /***************** ...

  4. C# 判断两张图片是否一致的快速方法

    #region 判断图片是否一致 /// <summary> /// 判断图片是否一致 /// </summary> /// <param name="img& ...

  5. 优秀it博客和文章

    优秀博客 综合 杨文博(供职于百度公司,任复合搜索部资深研发工程师,目前作为tech lead,负责垂直行业搜索后端架构研发.) 杨远骋 徐宥(Google 软件工程师. 这个中文博客是我的思考记录, ...

  6. iOS开发之UILabel

    UILabel是iOS开发中常用的一个组件,主要用来显示内容. UILabel的主要使用如下: /*尺寸*/ CGRect labelRect = CGRectMake(100, 100, 80, 4 ...

  7. Js获取Cookie值的方法

    function getCookie(name) { var prefix = name + "=" var start = document.cookie.indexOf(pre ...

  8. dojo(五):Dijit-基本组件

    转自:http://blog.csdn.net/trendgrucee/article/details/12679949 1.简介 Dijit是Dojo的UI框架,包含一系列丰富的组件以帮助你快速开发 ...

  9. 【转】经典SQL语句大全

    原博客地址:http://www.cnblogs.com/yubinfeng/archive/2010/11/02/1867386.html (超级纳闷为啥没有转载的功能) 一.基础 1.说明:创建数 ...

  10. create a C# context menu from code

    I try the one of your approach, it works well in my computer. Below is my code: public void AddConte ...