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. bootstrap table 分页显示问题

    1.bootstrap-table客户端分页 客户端分页的数据源可以是后台服务器端传递过来(一次性获取,即获取所有你需要的数据),点击页码不再请求后台,利用页面缓存分页;cache : true, / ...

  2. DevExpress WinForms使用教程:Data Grid - Find Panel模式

    [DevExpress WinForms v18.2下载] DevExpress WinForms用户都熟知,Data Grid是整个产品线的主要产品.在v18.2中添加了一些新的功能,例如之前教程中 ...

  3. Java输入输出小结

    无论使用哪一种编程语言,输入输出都是我们首当其冲的,因此简单整理了 一下关于Java输入输出知识点,还有些内容摘自其它博客,忘见谅. 第一部分,让我们看一下Java的输出 public class M ...

  4. day 36 关于io模型的问题 阻塞 和多路复用

    # from gevent import spawn,monkey;monkey.patch_all()# from socket import *# def server(ip,port):# se ...

  5. JFrame,JPanel,JLabel详解

    JFrame是一个顶层的框架类,好比一个窗户的框子.也是一个容器类.这个框子可以嵌入几个玻璃窗. JPanel是一个容器类,相当于一大玻璃窗. JLabel等是一些基础组件,它必须置于某个容器里,类似 ...

  6. L2-008. 最长对称子串

    L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输出最长对称子串的长度. ...

  7. cygwin 解压 tar.xz压缩包

    今天第一次接触到Cygwin,啊,不懂Linux,, 解压分为三个步骤. 第一步,进入压缩包所在的文件目录: cd e:\ >(左边会弹出这个符号,我以为后面的解压要在这里写,其实不是,要再按一 ...

  8. builtroot 添加git 下载方式

    1.buildroot/Config.in 配置default git server eg:config xxxx_GIT_SITE string "git site" defau ...

  9. Xposed Hook & Anti-hook

    一点简单记录. xposed原理包括将hook的method转为Native.因此可检测如下: for (ApplicationInfo applicationInfo : applicationIn ...

  10. jQuery的位置信息

    <head> <meta charset="UTF-8"> <title>jquery的位置信息</title> <style ...