分割(partition,stable_partition)
- 将数组中的元素分为两部分,第一部分[first,middle)中的每个元素都是pred(i)为true,第二部分[middle,last)中的每个元素都是pred(i)为false
- 返回值为middle
- partition执行速度很快,除非要求稳定性使用stable_partition,否则使用partition
- partition不保证与原来的数组中元素相对顺序相同,sable_partition保证
- 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)的更多相关文章
- C++STL算法速查
非变易算法 /* 第21章 非变易算法 Non-modifying sequence operations 21.0 advance, distance 为了了解模板,先了解一下这两个迭代器操作函 ...
- [置顶] Effective STL 学习笔记
看Effective STL 作的一些笔记,希望对各位有帮助. 以下是50条条款及相关解释. 容器 1. 慎重选择容器类型,根据需要选择高效的容器类型. 2. 不要试图编写独立于容器类型的代码. 3. ...
- 变易算法 - STL算法
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/mutating-algorithms.h ...
- Python基本数据类型之str
一.创建 s = "morra" s = str("morra") #str()这种方法会自动找到str类里的_init_方法去执行 ------------- ...
- [LintCode] Sort Integers II 整数排序之二
Given an integer array, sort it in ascending order. Use quick sort, merge sort, heap sort or any O(n ...
- 《C++编程规范:101条规则、准则与最佳实践》学习笔记
转载:http://dsqiu.iteye.com/blog/1688217 组织和策略问题 0. 不要为小事斤斤计较.(或者说是:知道什么东西不需要标准化) 无需在多个项目或者整个公司范围内强制实施 ...
- Linux 档案与目录管理
『 cd /etc 』这个情况,这也就是所谓的『绝对路径』,他是从根目录连续写上来的一个情况,所以不论你在哪一个路径现执行这一个指令,都会将你移动到该路径下.那如果我是使用『 cd etc 』呢?那表 ...
- 高效的使用STL
高效的使用STL 仅仅是个选择的问题,都是STL,可能写出来的效率相差几倍: 熟悉以下条款,高效的使用STL: 当对象很大时,建立指针的容器而不是对象的容器 1)STL基于拷贝的方式的来工作,任何需要 ...
- STL--STL和她的小伙伴们:
STL--概述: 标准模板库(StandardTemplateLibrary,STL),是C++程序设计语言标准模板库.STL是由Alexander Stepanov.Meng Lee和David R ...
随机推荐
- SQL-33 创建一个actor表,包含如下列信息
题目描述 创建一个actor表,包含如下列信息 列表 类型 是否为NULL 含义 actor_id smallint(5) not null 主键id first_name varchar(45) ...
- Centos7防范SYN
我们这里应用的是CentOS5.3,并内核使用的是2.6.18-128.el5PAE #1 SMP .修改部分TCP ,有的是为了提高性能与负载,但是存在降低稳定性的风险.有的则是安全方面的配置,则有 ...
- freemarker中的null异常处理以及!与??的使用(转)
原文链接: https://blog.csdn.net/mexican_jacky/article/details/50638062 阅读数:6304 如工程包含: 在user中我们有个角色,那么我们 ...
- SharePoint REST API - 文件夹和文件
博客地址:http://blog.csdn.net/FoxDave 本篇讲述如何通过REST操作文件夹和文件. 使用REST操作文件夹 在你知道某个文档库中的文件夹的URL时,可以使用如下的代码获 ...
- webpack进阶构建项目(一):1.理解webpack加载器
1.理解webpack加载器 webpack的设计理念,所有资源都是“模块”,webpack内部实现了一套资源加载机制,这与Requirejs.Sea.js.Browserify等实现有所不同. We ...
- 18-09-27 pandas 学习02
如何系统的学习python 中有关数据分析和挖掘相关的库?什么是系统的学习?系统的学习就是一个先搭建只是框架体系,然后不断填充知识看,不断更新迭代的过程. Pandas,numpy,scipy,mat ...
- VS Code 使用小技巧
所有插件查找地址(https://marketplace.visualstudio.com/) 编码快捷方式(http://docs.emmet.io/cheat-sheet/) 安装插件出现 错误 ...
- 【转】IPV6的地址类型
http://blog.sina.com.cn/s/blog_8d795a0f01018hiz.html <IPV6的地址类型>IPV6的地址类型 可分为三大类: 1.单播地址 2.组播地 ...
- idea 新建一个java项目并运行
这个只能算是个笔记,参考:参考文档 打开Idea,选择create new project,如图 或选择File ——> New——>Project... 出现以下界面,选中Java,然后 ...
- websocket js 代码样例
function StartWebSocket(wsUri) { websocket = new WebSocket(wsUri); websocket.onopen = function(evt) ...