懒癌的福音——algorithm头文件函数全集

  不知大家可否遇到这种情况:一道题想出思路后,一般都习惯性的百度一下有没有“现成的函数”可以调用,往往收获不菲,增长很多奇奇怪怪的知识。而这些“现成的函数”大部分都来自于algorithm头文件。简直就是我等懒癌的福音啊!
  当然,也有很多朋友喜欢自己写函数。因人而异吧,哈哈

  为了更方便、易懂, 笔者将每个函数的用法都注释在了代码中,同学们想要验证或加深印象直接复制到编译器里就可以运行。

代码:

#include<iostream>
#include<vector>
#include<cstdio>
#include<algorithm>

using namespace std;

bool cmp(int a, int b) {
	return a>b;
} 

int main()
{
	//首先定义要用到的变量 
	int a1 = 3, b1 = 4, x = 5;				//定义变量 
	int a2[5] = {11,22,33,44,55};			//定义数组 
	vector<int>v(a2,a2+5); 					//定义容器
	vector<int>::iterator it, it1;			//定义迭代器 
	
	//以下所有函数均为通用(数组、字符串、容器) 
//	1.1、最大值(max()) 
	cout << max(3,4) << endl;    			//输出4 

//	1.2、最小值(min())
	cout << min(3,4) << endl;				//输出3 
	
//	2、绝对值(abs()) 
	cout << abs(-3); 						//输出3
	
//	3、交换(swap()) 
	swap(a1,b1); 	cout << b1 << endl;   	//输出3 
	
//	4、翻转(reverse()) 
	reverse(a2,a2+5); 						//数组写法,输出 55 44 33 22 11
	reverse(v.begin(),v.end());				//容器写法,翻转两个迭代器之间的值
	 
//	5、填充(fill()) 
	int a3[5] = {11,33,22};
	fill(a3,a3+5,'@');						//数组变为:11,33,22,@,@
	
//	6、排序(sort()) 
	sort(a2,a2+5);							//默认升序
	sort(a2,a2+5,cmp);						//降序排序,需要写一个函数
	sort(v.begin(),v.end());				//容器用迭代器 
	
//	7.1、查找(find())
//	注意:若查找成功,则返回该值地址,若失败,则返回数组/容器第n+1位的地址。
//	因此,如果想返回所在值的角标,需要以下几行代码:
  //容器查找的做法: 
	int size = v.size();					//第一步:求长度
	it = find(v.begin(), v.end(), x);		//第二步:查找x在容器的位置,返回迭代器1
	it1 = v.begin();						//第三步:令迭代器2指向容器头 
	if(((it-it1)!=size)&&(*it==x))			//第四步:若同时满足这两个条件,则查找成功,输出 
		cout << (it-it1+1) << endl;			//输出所在位置 
  //数组查找的做法:
  	int *p = find(a2,a2+5,x);				//定义指针,指向查找完成后返回的地址,5为a2数组长度 
  	if(((p-a2) != size) && (*p == x))		//若同时满足这两个条件,则查找成功,输出 
  		cout << (p-a2+1);					//输出所在位置 
	
//	7.2、查找(upper_bound、lower_bound)
//	注:upper_bound():查找第一个大于x的值的位置
//		lower_bound():查找第一个大于等于x的值的位置 
//	用法和7.1相同,就不过多赘述了。

//	8、查找某值出现的次数(count()) 
	cout << count(a2, a2+5, 11);			//11在a2数组中出现了一次
	cout << count(v.begin(),v.end(),11);	//11在v容器中出现了一次
	
//	9、求最大公约数(__gcd()) 
//	注:底部横线的长度是2! 
	cout << __gcd(4,12);					//最大公约数是4
	
//	10.1、求交集(set_intersection()) 
//	设容器v1,v2,v3。v1,v2长度为size;   
	set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),inserter(v3,v3.begin())); 	//v1与v2的交集存入v3 
	
//	10.2、求并集(set_union()) 
//	用法同上

//	10.3、求差集(set_difference()) 
//	用法同上 

//	11、全排列(next_permutation()) 
	int a3[3] = {1,2,3};
	do{
		cout<<a3[0]<<a3[1]<<a3[2]<<endl; 
	}while(next_permutation(a3,a3+3));	//输出1、2、3的全排列 
	
	return 0;
 } 
/*
                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
             .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  `- \`.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
         I have a dream!A AC deram!!
         */

  如果有什么建议或疑问,可以给笔者留言哦,本条博文也会不定时更新,优化。

发布了73 篇原创文章 · 获赞 61 · 访问量 4777

猜你喜欢

转载自blog.csdn.net/weixin_43899069/article/details/104450000
今日推荐