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. SqlServer 数据库配置远程桌面

    1.是否开启远程桌面,1表示关闭,0表示开启 EXEC master..xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Contro ...

  2. 学习Canvas绘图与动画基础 制作弧和圆(五)

    1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="U ...

  3. 音视频开发:为什么推荐使用Jetpack CameraX?

    我们的生活已经越来越离不开相机,从自拍到直播,扫码再到VR等等.相机的优劣自然就成为了厂商竞相追逐的赛场.对于app开发者来说,如何快速驱动相机,提供优秀的拍摄体验,优化相机的使用功耗,是一直以来追求 ...

  4. Redis—简单动态字符串(SDS)

    目录 Redis-简单动态字符串(SDS) SDS的定义 SDS与C字符串的区别 1. 常数复杂度获取字符串长度: 2. 杜绝缓冲区溢出: 3. 减少修改字符串时带来的内存重分配次数 4. 二进制安全 ...

  5. Python数模笔记-Sklearn(1) 介绍

    1.SKlearn 是什么 Sklearn(全称 SciKit-Learn),是基于 Python 语言的机器学习工具包. Sklearn 主要用Python编写,建立在 Numpy.Scipy.Pa ...

  6. RxJava线程控制

    RxJava中的线程转换主要通过下面两个方法: 1.subscribeOn 2.observeOn 一.subscribeOn 1.调用一次subscribeOn时: Observable obser ...

  7. 初始化mysql报错bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

    原因:缺少libaio.so.1 解决办法:安装即可 yum install -y libaio

  8. 软件测试中的测试用例Test Case原来是这么回事!

    如果你去找一份功能测试的工作,在软件测试工程师面试过程中,有一些面试官会来一两个非常简单的问题 什么是Test Case?你是如何去写Test Case的? 我们先来看一下测试用例的介绍 什么是测试用 ...

  9. TypeScript 中限制对象键名的取值范围

    当我们使用 TypeScript 时,我们想利用它提供的类型系统限制代码的方方面面,对象的键值,也不例外. 譬如我们有个对象存储每个年级的人名,类型大概长这样: type Students = Rec ...

  10. Spring的Xml和JavaConfig 扩展你选哪一个?

    引言 上一篇文章我们有怎么介绍到如何通过XML的形式来定义Spring的扩展<Spring面试高频题如何:自定义XML schema 扩展>,好多人都在吐槽现在都什么年代了,xml还有人再 ...