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. MS08_067漏洞攻击

    MS08_067 MS08_067是典型的缓冲区溢出漏洞,Windows的Server服务在处理特制RPC请求时存在缓冲区溢出漏洞,远程攻击者可以通过发送恶意的RPC请求触发这个溢出,导致完全入侵用户 ...

  2. 使用Windows全局钩子打造键盘记录器

    简介 键盘记录功能一直是木马等恶意软件窥探用户隐私的标配,那么这个功能是怎么实现的呢?在Ring3级下,微软就为我们内置了一个Hook窗口消息的API,也就是SetWindowsHookEx函数,这个 ...

  3. [CTF]培根密码

    [CTF]培根密码 ---------------------  作者:adversity`  来源:CSDN  原文:https://blog.csdn.net/qq_40836553/articl ...

  4. 3-5年以上的Android原生开发如何深入进阶?高级工程师必须要掌握哪些?

    前言 曾听过很多人说Android学习很简单,做个App就上手了,工作机会多,毕业后也比较容易找工作.这种观点可能是很多Android开发者最开始入行的原因之一. 在工作初期,工作主要是按照业务需求实 ...

  5. (Py练习)输出乘法口诀表

    #输出9*9乘法口诀表 for i in range(1,10): for j in range(1,i+1): print("%d*%d=%2d"%(i,j,i*j),end = ...

  6. 【opencv】VideoCapture打不开本地视频文件或者网络IP摄像头

    1.前提:成功打开本地USB摄像头 // 创建VideoCapture对象 VideoCapture vc = new VideoCapture(); // 可以成功打开本地USB摄像头 // 参数可 ...

  7. MySQL字段默认值设置详解

    前言: 在 MySQL 中,我们可以为表字段设置默认值,在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值.关于默认值,有些知识还是需要了解的,本篇文章我们一起来学习下字 ...

  8. Blazor实现未登录重定向到登录页的方法

    今天研究了一下blazor,发现他默认启动就是类似于后台管理系统的界面,看到这个页面我就想给他写个登录,有登录就涉及到未登录重定向的问题,但是我没有找到blazor全局路由的设置,知道的老哥可以告诉我 ...

  9. [bug] VMvare 虚拟机磁盘空间耗尽

    问题 VMvare虚拟机文件默认创建在C盘,装大程序的时,空间用尽就会报错,此时补救的办法是把虚拟机文件复制到空间足够的盘,再重新打开 最好一开始就选再有足够空间的盘里创建虚拟机 参考 https:/ ...

  10. 解析CentOS 8上的Xrdp服务器安装

    解析CentOS 8上的Xrdp服务器安装   Linux系统技术交流QQ群(915246)验证问题答案:刘遄 导读 Xrdp 是 Microsoft 远程桌面协议 (RDP) 的开源实现,允许您以图 ...