这里主要介绍颠倒、旋转、随机排列和分类4中常见的整理算法

1、颠倒(反转)

void reverse(_BidIt _First, _BidIt _Last)

_OutIt reverse_copy(_BidIt _First, _BidIt _Last,_OutIt _Dest)

2、旋转

_FwdIt rotate(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last)

_OutIt rotate_copy(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last,_OutIt _Dest)

交换[_First, _Mid)和[_Mid, _Last)的位置

3、随机排列

void random_shuffle(_RanIt _First, _RanIt _Last, _Fn1& _Func)

4、分类(注意分类算法需要写一个分类标准的结构体,需要继承STL的函数对象uniry_function或binary_function)

_BidIt partition(_BidIt _First, _BidIt _Last, _Pr _Pred)

_BidIt stable_partition(_BidIt _First, _BidIt _Last, _Pr _Pred)

将迭代器区间内的数据分成两部分,符合标准的数据将放在的迭代器区间的前面部分,不符合标准的放在迭代器的后半部分

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<functional>
 4 using namespace std;
 5 void print(int *num,int n)
 6 {
 7     for(int i=0;i<n;i++)
 8     {
 9         cout<<num[i]<<' ';
10     }
11     cout<<endl;
12 }
13 int main()
14 {
15     int num[10]={1,2,4,5,7,3,4};
16     print(num,7);
17     //void reverse(_BidIt _First, _BidIt _Last)
18     reverse(num,num+7);
19     print(num,7);
20     int num_r_copy[7];
21     //_OutIt reverse_copy(_BidIt _First, _BidIt _Last,_OutIt _Dest)
22     reverse_copy(num,num+7,num_r_copy);
23     print(num,7);
24     print(num_r_copy,7);
25
26
27     //_FwdIt rotate(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last)
28     //交换[_First, _Mid)和[_Mid, _Last)的位置
29     print(num,7);
30     rotate(num,num+1,num+7);
31     print(num,7);
32
33     rotate(num,num+2,num+5);
34     print(num,7);
35     //rotate_copy
36     //_OutIt rotate_copy(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last,_OutIt _Dest)
37     //不改变原数组,将旋转好的数组放在新的数组里
38
39     //随机排列
40     //void random_shuffle(_RanIt _First, _RanIt _Last, _Fn1& _Func)
41     random_shuffle(num,num+7);
42     print(num,7);
43
44     //分类
45     //注意分类算法是需要写一个分类标准的函数的,所以需要用到写一个新的结构体或者类来继承STL函数,并且重载()运算符
46     //partition、stable_partition
47     //_BidIt partition(_BidIt _First, _BidIt _Last, _Pr _Pred)
48     //将迭代器区间内的数据分成两部分,符合标准的数据将放在的迭代器区间的前面部分,不符合标准的放在迭代器的后半部分
49     struct iseven :public unary_function<int,bool>
50     {
51         bool operator()(int val)//重载()运算符
52         {
53             return val%2==0;//判断是否为偶数
54         }
55     };
56     int ynum1[10]={1,2,3,4,5,6,7,8,9,10};
57     print(ynum1,10);
58     partition(ynum1,ynum1+10,iseven());
59     print(ynum1,10);
60
61     int ynum2[10]={1,2,3,4,5,6,7,8,9,10};
62     print(ynum2,10);
63     stable_partition(ynum2,ynum2+10,iseven());
64     print(ynum2,10);
65     return 0;
66 }

转载于:https://www.cnblogs.com/bewolf/p/4424994.html

C++STL之整理算法相关推荐

  1. 垃圾回收器机制(二):快速解读GC算法之标记-清除,复制及标记整理-算法

    标记/清除算法 它的做法是当堆中的有效内存空间(available memory)被耗尽的时候,就会停止整个程序(也被成为stop the world),然后进行两项工作,第一项则是标记,第二项则是清 ...

  2. Data Structures with C++ Using STL Chapter 3算法概述---笔记

    <Data Structures with C++ Using STL Chapter 3算法概述---笔记>,作者:茉莉花茶,原文链接:http://www.cnblogs.com/yc ...

  3. stl非变易算法(二)

    这里接着上篇stl非变易算法(一)进行总结.主要解析算法函数count.count_if.mismatch.equal.search.search_n以及find_end.给出算法函数的实现及測试用例 ...

  4. 【Java 虚拟机原理】垃圾回收算法 ( 标记-清除算法 | 复制算法 | 标记-整理算法 )

    文章目录 总结 一.标记-清除算法 二.复制算法 三.标记-整理算法 总结 常用的垃圾回收算法 : 标记-清除算法 ; 复制算法 ; 标记-整理算法 ; 这些算法没有好坏优劣之分 , 都有各自的 优势 ...

  5. C++ STL 常用查找算法

    C++ STL 常用查找算法 adjacent_find() 在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的迭代器.否则返回past-the-end. ...

  6. C++ STL 常用遍历算法

    C++ STL 常用遍历算法 STL的容器算法迭代器的设计理念 1) STL的容器通过类模板技术,实现数据类型和容器模型的分离  2) STL的迭代器技术实现了遍历容器的统一方法:也为STL的算法提供 ...

  7. C++STL常用集合算法

    C++STL常用集合算法 学习目标 算法简介 set_intersection 功能描述 函数原型 示例 总结 set_union 功能描述 函数原型 示例 总结 set_difference 功能描 ...

  8. C++STL常用排序算法

    C++STL常用排序算法 学习目标 算法简介 sort 功能描述 函数原型 示例 总结 random_shuffle 功能描述 函数原型 示例 总结 merge 功能描述 函数原型 示例 总结 rev ...

  9. C++STL常用查找算法

    C++STL常用查找算法 学习目标 算法简介 find 功能描述 函数原型 示例 总结 find_if 功能描述 函数原型 示例 总结 adjacent_find 功能描述 函数原型 示例 总结 bi ...

  10. C++STL常用遍历算法

    C++STL常用遍历算法 概述 学习目标 算法简介 for_each 功能描述 函数原型 示例 总结 transform 功能描述 函数原型 示例 总结 概述 算法主要是由头文件<algorit ...

最新文章

  1. Matlab入门笔记
  2. lanmp环境的搭建
  3. android152 笔记 2
  4. c++STL之vector简易使用
  5. 100个LINUX站点
  6. 《机器学习实战》chapter05 Logistic回归
  7. Play! Framework 系列(三):依赖注入
  8. 斐波那契数列与阶乘---递归实现
  9. 前端学习(310):清除浮动的方法
  10. Apache会比路虎的应急效果更好
  11. Android知识体系框架
  12. Nginx 二级子域名完美方案
  13. java 局部变量垃圾回收_java局部变量对垃圾回收的影响
  14. 27. 二叉搜索树与双向链表(C++版本)
  15. VS C++ def
  16. 账龄分析表excel模板_华为财务EXCEL内训手册(共131套模板,带公式).xls
  17. 五大主流浏览器的介绍
  18. tdk磁材手册_TDK磁性材料市场.ppt
  19. 在线轻松制作微信公众号封面次图的方法
  20. 2020CVPR对抗样本相关论文整理(无开源代码)

热门文章

  1. Linux日志终极指南
  2. 你知道哪些苹果自家应用采用 Swift 语言编写吗?
  3. Linux时间操作(time、gettimeofday)
  4. SERVER 2008 +MSSQL2008+SCCM安装记录
  5. CCNP系列三十四--- Bgp的本地优先属性
  6. 关于Cognos Netscape directory server的安装
  7. Shiro(二)——Shiro认证入门案例
  8. [数据结构] 三十二叉堆
  9. 分布式存储之Ceph软件安装及使用
  10. 启动FastDFS,安装nginx,整合fdfs与nginx,进行上传下载测试