C++STL之整理算法
时间:2022-04-26
本文章向大家介绍C++STL之整理算法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这里主要介绍颠倒、旋转、随机排列和分类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 }
- 了解全球加密货币市场,从它的起源开始
- java:读/写配置文件
- 对JAVASCRIPT匿名函数的理解
- python 项目中的 requirements.txt
- 2017奇葩机器人大盘点:Sophia想生孩子,Atlas后空翻,贝佐斯骑“高达”……
- XmlSpy / XSD 以及 验证
- jQuery基础
- java与c#的反射性能比较
- 多迪技术总监揭秘:前端工程师主要做什么?前景怎么样?
- c#:Reflector+Reflexil 修改编译后的dll/exe文件
- testNG java.net.SocketException: Software caused connection abort: socket write error
- MyBatis.Net 学习手记
- 基于JavaScript 声明全局变量的三种方式详解
- 网页基础篇之如何制作简单的静态网页
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- InnoDB Tidbit:The doublewrite buffer wastes 32 pages (512 KiB) (12.双写缓冲区会导致512KB的浪费)
- 10 | Tornado源码分析:Gen 对象(上)
- springboot使用spring-cloud-starter-alibaba-sentinel导致响应变成xml格式
- 内网安全攻防之内网渗透测试基础
- CMake脚本中如何修改XCode工程属性?
- 数值微分|有限差分法的误差分析
- Odyssey
- 【MySQL】之join算法详解
- 性能最佳实践:查询模式和分析
- Node 如何在 Controller 层进行数据校验
- FlutterDojo设计之道——状态管理之路(二)
- EyouCms前台GetShell漏洞复现
- CentOS7系统使用rpm方式安装MySQL5.7
- Mysql的主从复制
- 初学者指南:什么是算法?11行伪代码给你讲明白