1. 将数组中的元素分为两部分,第一部分[first,middle)中的每个元素都是pred(i)为true,第二部分[middle,last)中的每个元素都是pred(i)为false
  2. 返回值为middle
  3. partition执行速度很快,除非要求稳定性使用stable_partition,否则使用partition
  4. partition不保证与原来的数组中元素相对顺序相同,sable_partition保证
  5. stable_partition是一个adpative算法,会试图分配内存缓冲区,其运行复杂度取决于缓冲区中有多少内存,最坏情况下没有分配任何内存,至多调用swap Nlog(N)次,N为last-first,最好情况下(缓冲区中有足够内存)与N呈线性关系,两种情况下pred都被调用N次
template <class ForwardIterator, class UnaryPredicate>
ForwardIterator partition (ForwardIterator first,ForwardIterator last, UnaryPredicate pred)
{
while (true)
{
while (true)
if (first == last)//头指针等于尾指针,所有操作结束
return first;
else if (pred(*first))//头指针所指元素不符合移动条件
++first;
else//头指针所指元素符合移动条件,跳出内循环
break; --last;//尾指针减1 while (true)
if (first == last)//头指针等于尾指针,所有操作结束
return first;
else if (!pred(*last))//尾指针所指元素不符合移动条件
--last;
else//尾指针所指元素符合移动条件,跳出内循环
break;
iter_swap(first, last);//头尾指针所指元素彼此交换
++first;//头指针前进1,准备下一个外循环迭代
}
}
template <class ForwardIterator, class UnaryPredicate>
ForwardIterator stable_partition (ForwardIterator first,ForwardIterator last, UnaryPredicate pred);

分割(partition,stable_partition)的更多相关文章

  1. C++STL算法速查

      非变易算法 /* 第21章 非变易算法 Non-modifying sequence operations 21.0 advance, distance 为了了解模板,先了解一下这两个迭代器操作函 ...

  2. [置顶] Effective STL 学习笔记

    看Effective STL 作的一些笔记,希望对各位有帮助. 以下是50条条款及相关解释. 容器 1. 慎重选择容器类型,根据需要选择高效的容器类型. 2. 不要试图编写独立于容器类型的代码. 3. ...

  3. 变易算法 - STL算法

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/mutating-algorithms.h ...

  4. Python基本数据类型之str

    一.创建 s = "morra" s = str("morra") #str()这种方法会自动找到str类里的_init_方法去执行 ------------- ...

  5. [LintCode] Sort Integers II 整数排序之二

    Given an integer array, sort it in ascending order. Use quick sort, merge sort, heap sort or any O(n ...

  6. 《C++编程规范:101条规则、准则与最佳实践》学习笔记

    转载:http://dsqiu.iteye.com/blog/1688217 组织和策略问题 0. 不要为小事斤斤计较.(或者说是:知道什么东西不需要标准化) 无需在多个项目或者整个公司范围内强制实施 ...

  7. Linux 档案与目录管理

    『 cd /etc 』这个情况,这也就是所谓的『绝对路径』,他是从根目录连续写上来的一个情况,所以不论你在哪一个路径现执行这一个指令,都会将你移动到该路径下.那如果我是使用『 cd etc 』呢?那表 ...

  8. 高效的使用STL

    高效的使用STL 仅仅是个选择的问题,都是STL,可能写出来的效率相差几倍: 熟悉以下条款,高效的使用STL: 当对象很大时,建立指针的容器而不是对象的容器 1)STL基于拷贝的方式的来工作,任何需要 ...

  9. STL--STL和她的小伙伴们:

    STL--概述: 标准模板库(StandardTemplateLibrary,STL),是C++程序设计语言标准模板库.STL是由Alexander Stepanov.Meng Lee和David R ...

随机推荐

  1. transclude

    http://jsfiddle.net/ospatil/A969Z/157/ transclude :true  允许指令内部的dom元素, 保留到 自定义指令的template属性里的含有 ng-t ...

  2. 无法获取 vmci 驱动程序版本: 句柄无效

    https://jingyan.baidu.com/article/a3a3f811ea5d2a8da2eb8aa1.html 将 vmci0.present = "TURE" 改 ...

  3. capjoint中的tel3核心代码teleseis3.f90

    为了加入更多层的模型 将 teleseis3.f90 /home/capjoint-master/src/tel3/teleseis3.90的地层模型读取部分改为: program test PARA ...

  4. Appium Python API

    1.contexts contexts(self): Returns the contexts within the current session. 返回当前会话中的上下文,使用后可以识别H5页面的 ...

  5. python Django rest-framework 序列化步骤

    django-rest-framework,是一套基于Django 的 REST 框架,是一个强大灵活的构建 Web API 的工具包.本文介绍一下 django-rest-framework 的简单 ...

  6. Kaggle(1):数据挖掘的基本流程

    我觉得做任何事情,一定要有章法.对于学习类的事情,就是要有框架.第一次打Kaggle比赛,我的一个重要收获就是初步搞清楚了打这类比赛的框架. 可以分为以下六步:理解问题.分析问题.算法选择.结果评价. ...

  7. 解析JSON 注意解析数据为一个对象的情况.--加一下说明

    应用场景: 调某接口时, 获取json数据, 需要对数据进行解析 . 第一种: 只判断接口是否调用成功 { "code":"10102000", "d ...

  8. ORA-15025 搭建DG环境,restore controlfile报错,提示oracle无法使用ASM存储

    环境说明: #主库RAC环境 #备库RAC环境,操作系统AIX 6.1 数据库版本11.2.0.3 报错说明: #主库备份控制文件,传输至备库,备库restore 报错 本篇文档,分为两大阶段:第一阶 ...

  9. 【算法基础】卡尔曼滤波KF

    kalman filter KCF 尺度变化是跟踪中比较基本和常见的问题,前面介绍的三个算法都没有尺度更新,如果目标缩小,滤波器就会学习到大量背景信息,如果目标扩大,滤波器就跟着目标局部纹理走了,这两 ...

  10. 【重要】NOI-1.2-10-字符串大小

    10:Hello, World!的大小 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 还记得在上一章里,我们曾经输出过的“Hello, World!”吗? ...