algorithm头文件常用高效函数

  • max()

max(a, b)返回a和b中的最大值,参数必须是两个(可以是浮点型)。

 1 #include <iostream>
2 #include <algorithm>
3 using namespace std;
4 int main()
5 {
6 int a=3,b=6,c=8;
7 cout<<a<<" "<<b<<"最大值为"<<max(a,b)<<endl;
8 cout<<a<<" "<<b<<" "<<c<<"最大值为"<<max(a,max(b,c))<<endl; //可以嵌套使用
9 return 0;
10 }
  • min()

基本用法同max(),不同的是min()求的是最小值。

 1 #include <iostream>
2 #include <algorithm>
3 using namespace std;
4 int main()
5 {
6 int a=3,b=6,c=8;
7 cout<<a<<" "<<b<<"最小值为"<<min(a,b)<<endl;
8 cout<<a<<" "<<b<<" "<<c<<"最小值为"<<min(a,min(b,c))<<endl; //可以嵌套使用
9 return 0;
10 }
  • swap()

swap(a, b)用来交换a和b的值。

 1 #include <iostream>
2 #include <algorithm>
3 using namespace std;
4 int main()
5 {
6 int a=3,b=6;
7 cout<<a<<" "<<b<<endl; //交换前
8 swap(a,b);
9 cout<<a<<" "<<b<<endl; //交换后
10 return 0;
11 }
输出结果:
3 6
6 3
  • reverse()

reverse(it1, it2)可以将数组指针在[it1, it2)之间的元素或容器的迭代器在[it1, it2)范围内的元素进行反转。

 1 #include <iostream>
2 #include <algorithm>
3 using namespace std;
4 int main()
5 {
6 int a[5] = {1,2,3,4,5};
7 reverse(a,a+3); //将a[0]-a[2]反转
8 for(int i=0;i<5;i++){
9 cout<<a[i]<<" ";
10 }
11 return 0;
12 }
输出结果:
3 2 1 4 5
  • next_permutation()

next_permutation()用来求一个全排列的下一个序列。

例如,n=3的全排列

123
132
213
231
312
321

这样132的下一个序列就是213。

 1 #include <iostream>
2 #include <algorithm>
3 using namespace std;
4 int main()
5 {
6 int a[3] = {1,2,3};
7 do{
8 cout<<a[0]<<a[1]<<a[2]<<endl;
9 }while(next_permutation(a,a+3));
10 return 0;
11 }
输出结果:
123
132
213
231
312
321
  • fill()

fill()可以把数组或容器中的某一段区间赋值为某个相同的值,与C语言中常用的memset不同的是,这里的赋值可以是数组类型对应范围中的任意值。

 1 #include <iostream>
2 #include <algorithm>
3 using namespace std;
4 int main()
5 {
6 int a[5] = {1,2,3,4,5};
7 fill(a,a+5,6); //将数组全部元素赋值为6
8 for(int i=0;i<5;i++){
9 cout<<a[i]<<" ";
10 }
11 return 0;
12 }
输出结果:
6 6 6 6 6
  • sort()

sort()是常用的排序函数,效率较高,使用灵活方便。

使用sort函数的格式为

sort(首元素地址(必填), 尾元素地址的下一个地址(必填), 比较函数(非必填));

sort函数默认为递增排序。

 1 #include <iostream>
2 #include <algorithm>
3 using namespace std;
4 int main()
5 {
6 int a[8] = {5,3,2,1,4,9,8,0};
7 sort(a,a+4); //将a[0]-a[3]进行递增排序
8 for(int i=0;i<8;i++){
9 cout<<a[i]<<" ";
10 }
11 return 0;
12 }
输出结果:
1 2 3 5 4 9 8 0

相应的,sort函数还可以对其它类型的数组进行排序(如float、double、char),对char型数组排序时默认为字典序。

既然sort函数默认为递增排序,那我们如何实现递减排序呢?这时就需要用到我们的比较函数了。

实现比较函数

从上面的例子可以看出,如果sort函数中的比较函数不填,则默认按照递增排序,下面的例子我们使用比较函数来实现递减排序。

 1 #include <iostream>
2 #include <algorithm>
3 using namespace std;
4 bool cmp(int a,int b){  
5 return a>b;
6 }
7 int main()
8 {
9 int a[8] = {5,3,2,1,4,9,8,0};
10 sort(a,a+4,cmp); //将a[0]-a[3]进行递减排序
11 for(int i=0;i<8;i++){
12 cout<<a[i]<<" ";
13 }
14 return 0;
15 }
输出结果:
5 3 2 1 4 9 8 0

可以看出,通过添加了一个比较函数cmp(函数名字可以自行声明),我们实现了递减排序。cmp函数中return a>b规定了sort需要从大到小排序。相应的,如果写成return a<b,则从小到大排序。

algorithm头文件下还有很多方便我们编程的函数,这里只是举了几个平时写算法时经常用到的一些简易函数,也是算法竞赛中经常使用的几个函数。相信通过熟练使用这些函数,一定会提高我们编写算法的效率。

algorithm头文件下的常用函数的更多相关文章

  1. STL algorithm 头文件下的常用函数

    algorithm 头文件下的常用函数 1. max(), min()和abs() //max(x,y)和min(x,y)分别返回x和y中的最大值和最小值,且参数必须时两个(可以是浮点数) //返回3 ...

  2. 头文件<cmath>中常用函数

    <cmath>里面有很多数学函数,下面说一下常用的一些函数吧:直接把函数原型给了出来,用的时候注意参数 先说一下,c++自身是没有四舍五入函数round()的,若果你要用到的话,可以自己写 ...

  3. algorithm下的常用函数

    algorithm下的常用函数 max(),min(),abs() max(x,y)返回x和y中最小的数字 min(x,y)返回x和y中最大的数字 abs(x)返回x的绝对值,注意x应当是整数,如果是 ...

  4. linux设备驱动程序该添加哪些头文件以及驱动常用头文件介绍(转)

    原文链接:http://blog.chinaunix.net/uid-22609852-id-3506475.html 驱动常用头文件介绍 #include <linux/***.h> 是 ...

  5. 【Linux 应用编程】文件IO操作 - 常用函数

    Linux 系统中的各种输入输出,设计为"一切皆文件".各种各样的IO统一用文件形式访问. 文件类型及基本操作 Linux 系统的大部分系统资源都以文件形式提供给用户读写.这些文件 ...

  6. pandas 学习(二)—— pandas 下的常用函数

    import pandas as pd; 1. 数据处理函数 pd.isnull()/pd.notnull():用于检测缺失数据: 2. 辅助函数 pd.to_datetime() 3. Series ...

  7. c++标准模板库algorithm头文件中accumulate算法的代码

    template <typename T>T algorithm(T* start, T* end, T total)//把[start, end)标记范围内所有元素累加到total中{  ...

  8. algorithm与numeric的一些常用函数

    numeric中的accumulated的基本用法: 来自:https://blog.csdn.net/u011499425/article/details/52756242 #include < ...

  9. PHP_File文件操作简单常用函数

    php测试文件 <?php header("Content-type:text/html;charest=utf-8");$fileDir='Upload/File/cont ...

随机推荐

  1. Windows XP sp3 系统安装 Windbg 符号文件 Symbols 时微软失去支持的解决方案

    0x01 前言 Windbg 是微软的正宗调试器,在正常的情况下调试一些程序并没有什么问题,但是如果需要调试分析程序的堆栈,或者是一些特殊的功能时则需要微软的符号文件的支持,所以符号文件是非常重要的, ...

  2. 使用SSH端口做端口转发以及反向隧道

    目录 SSH做本地端口转发 SSH做反向隧道(远程端口转发) 用autossh建立稳定隧道 SSH开启端口转发需要修改 /etc/ssh/sshd_config配置文件,将 GatewayPorts修 ...

  3. CTF密码学常见加解密总结

    CTF密码学常见加解密总结 2018年03月10日 19:35:06 adversity` 本文链接:https://blog.csdn.net/qq_40836553/article/details ...

  4. Python视频压缩

    html, body { font-family: "SF UI Display", ".PingFang SC", "PingFang SC&quo ...

  5. 【JavaScript】Leetcode每日一题-组合总和4

    [JavaScript]Leetcode每日一题-组合总和4 [题目描述] 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target .请你从 nums 中找出并返回总和为 targ ...

  6. IDEA 导入Springboot 项目:

    更多精彩关注公众号: IDEA 导入Springboot 项目: 1. 菜单->File->New->Project From Existing Sources 2. 选中项目中的p ...

  7. MySQL慢日志全解析

    前言: 慢日志在日常数据库运维中经常会用到,我们可以通过查看慢日志来获得效率较差的 SQL ,然后可以进行 SQL 优化.本篇文章我们一起来学习下慢日志相关知识. 1.慢日志简介 慢日志全称为慢查询日 ...

  8. Java_常用类API之一

    Math类 Math类中包含一些对数据进行数学运算的方法,而该类中的方法全都是静态的.像这样的类称之为工具类. 1 public static int abs(int a) 2 对一个数据求绝对值 3 ...

  9. 前端必读:Vue响应式系统大PK(下)

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://www.sitepoint.com/vue-3-reactivity-system ...

  10. font

    font属性简写 front: font-style font-variant font-weight font-size/line-height font-family 说明: 值之间空格隔开 注意 ...