1、partition将区间[first, last)中的元素重新排列。所有被一元条件运算pred判定为true的元素,放在区间的前段,判定为false的元素,放在区间的后段。该算法并不保证元素的原始相对位置。

2、partition源代码

template <class BidirectionalIterator, class Predicate>
BidirectionalIterator partition(BidirectionalIterator first,BidirectionalIterator last, Predicate pred) {while (true) {while (true)if (first == last)//头指针等于尾指针,所有操作结束return first;else if (pred(*first))//头指针所指元素不符合移动条件++first;else//头指针所指元素符合移动条件,跳出内循环break;--last;//尾指针减1while (true)if (first == last)//头指针等于尾指针,所有操作结束return first;else if (!pred(*last))//尾指针所指元素不符合移动条件--last;else//尾指针所指元素符合移动条件,跳出内循环break;iter_swap(first, last);//头尾指针所指元素彼此交换++first;//头指针前进1,准备下一个外循环迭代}
}

3、具体例子

#include<iostream>
#include<algorithm>
using namespace std;template<typename T>
struct isEven:public unary_function<T,bool>{bool operator()(const T& x) const{return x % 2 ? false : true;}
};
int main(){int ia[] = { 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 6, 7, 8 };partition(begin(ia), end(ia), isEven<int>());for (int* it = begin(ia); it != end(ia); ++it)cout << *it << " ";cout << endl;system("pause");return 0;
}

4、上述例子中partition工作过程

转载于:https://www.cnblogs.com/ruan875417/p/4558303.html

【STL源码剖析读书笔记】【第6章】算法之partition算法相关推荐

  1. STL源码剖析读书笔记--第6章第7章--算法与仿函数

    老实说,这两章内容还蛮多的,但是其实在应用中一点点了解比较好.所以我决定这两张在以后使用过程中零零散散地总结,这个时候就说些基本概念好了.实际上,这两个STL组件都及其重要,我不详述一方面是自己偷懒, ...

  2. 【STL源码剖析读书笔记】自己实现stack之MyStack(底层用MyList)

    MyList.h #ifndef MY_LIST_H #define MY_LIST_H#include<memory> //list的node结构 template<typenam ...

  3. 【STL源码剖析读书笔记】【第5章】关联式容器之hashtable

    1.hashtable在插入.删除.搜寻操作上具有"常数平均时间"的表现,不依赖输入元素的随机性. 2.hashtable通过hashfunction将元素映射到不同的位置,但当不 ...

  4. 【STL源码剖析读书笔记】【第5章】关联式容器之set、map、multiset和multimap

    一.set 1.  set的特性是所有元素都会根据元素的键值自动排序,set元素的键值就是实值,实值就是键值. 2.  不能通过set的迭代器改变set的元素,setiterators是一种const ...

  5. STL源码剖析 读书笔记一 2013-5-4

    SGI STL  是声名最盛的一个STL版本,该版本被纳为GNU C++标准程序库. STL六大组件的交互关系:container通过allocator取得数据存储空间,algorithm通过iter ...

  6. 《STL源码剖析》笔记——allocator

    六大组件间关系 部分STL文件包含关系 allocator包含于中: 实际实现于三个文件 : 1.stl_construct.h :对象的构造和析构 2.stl_alloc.h空间配置和释放 3.st ...

  7. python源码剖析读书笔记总结_《Python源码剖析》读书笔记:内存垃圾回收

    Python内存回收的基石是引用计数,"当一个对象的引用被创建或复制时,对象的引用技术加1:当一个对象的引用被销毁时,对象的引用技术减1",如果对象的引用计数减少为0,将对象的所占 ...

  8. 【STL源码剖析】迭代器

    [STL源码剖析]迭代器 第3章 迭代器(iterators)与traits编程技法(<STL源码剖析> ) 3.1 迭代器设计思维--STL关键所在 3.2 迭代器(iterator)是 ...

  9. C++ STL源码剖析 笔记

    写在前面 记录一下<C++ STL源码剖析>中的要点. 一.STL六大组件 容器(container): 各种数据结构,用于存放数据: class template 类泛型: 如vecto ...

最新文章

  1. 学术前沿 | 图像质量量化评估标准综述
  2. Mysql练习题14-至少有5名直接下属的经理
  3. Asp.net Mvc Enum 扩展
  4. jquery 操作字符串、数组、对象常用方法
  5. 通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔
  6. SpringMVC的请求-获得请求参数-请求参数类型
  7. linux 系统安装mongodb数据库---方法1
  8. ZOJ 2760 How Many Shortest Path 最大流+floyd求最短路
  9. jdbc连接oracle mysql_JDBC连接MySQL、Oracle和SQL server的配置
  10. Oracle内存结构详解(四)--Oracle SGA其他组成部分
  11. 高速PCB电路板的信号完整性设计
  12. 如何设置内网端口映射外网
  13. excel打开很慢_从海量Excel文件中快速高效地提取数据
  14. 手写Spring-第十六章-旋转吧雪月花!用三级缓存解决循环依赖
  15. 关于@hide的理解
  16. html 串行通信接口,一种串行通信接口的级联方法与流程
  17. 【@NotNull和@NotBlank的区别】
  18. AD16原理图导出PCB报错Footprint not found
  19. 确认过眼神,你是我要找的人!面试通关技巧,礼仪hin重要!
  20. 基于SpringBoot的实习管理系统

热门文章

  1. 免费硬件、万元奖池、百度内推,AI达人创造营邀你出战!
  2. “遇事不决,量子力学”?微软亚研院开源时空预测开源工具:FOST,应对各行业共性预测需求!...
  3. 【Attention九层塔】注意力机制的九重理解
  4. CV Papers|计算机视觉论文推荐周报20200501期
  5. Keras与PyTorch全方位比较 哪一个深度学习框架更适合初学者?
  6. Fastformer:史上最强最快Transformer!清华、MSRA出品!
  7. 超强领先!Transformer图像复原效果显著!
  8. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)习题答案
  9. HALCON学习之旅(四)
  10. html与markdown互相转换