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. Python脚本破解Linux口令(crypt模块)

    环境 Kali Linux ,python版本2.7.13 . 我们利用Linux系统中的 crypt 模块模拟了Linux系统中用户密码的加密,在Windows中是不存在这个库的. 在Linux系统 ...

  2. Swift系列三 - 函数

    函数在任何语言中都是存在的,Swift中函数更加灵活. 一.函数的定义 1.1. 有返回值(形参默认是let,也只能是let) func pi() -> Double { return 3.14 ...

  3. TCP的握手和挥手

    三次握手 三次握手具体过程是什么? 客户端发送一个数据包 将SYN置成1,表示希望建立连接 这个包中的序列号是X 服务器收到客户端发来的数据包 通过SYN得知这是一个建立连接的请求 于是发送一个响应包 ...

  4. 转: inline关键字使用

    1.inline用在函数声明时,还是函数定义时?还是两边都加? 首先,内联函数声明和定义最好在同一个文件中,其它的情况没有实用上的意义. 只要在同一个文件中,声明和定义至少其一加"inlin ...

  5. 老vue项目webpack3升级到webpack5全过程记录(一)

    背景 19年新建的vue项目,使用的是webpack3,随着项目的积累,组件的增多导致本地构建,线上打包等操作速度极慢,非常影响开发效率和部署效率,基于此问题,本次对webpack及相关插件进行了优化 ...

  6. not full 和 default

    create table t16( id int, name char(6), sex enum('male','female') not null default 'male'); insert i ...

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

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

  8. [刷题] 102 Binary Tree Level Order Traversal

    要求 对二叉树进行层序遍历 实现 返回结果为双重向量,对应树的每层元素 队列的每个元素是一个pair对,存树节点和其所在的层信息 1 Definition for a binary tree node ...

  9. sosreport命令 然后diff 正常的操作系统例如centos

    nux学习笔记:有用的linux命令  发表于 2018-06-25 |  分类于 linux|  字数统计: 1,269 |  阅读时长 ≈ 6 写在前面 这着笔记,整理一些网上搜集到有用的linu ...

  10. ELK日志收集分析平台部署使用

    一.ELK介绍 开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch.Logstash和Kiabana三个开源工具组成: 1.ElasticSearch是一个基于 ...