不知大家可否遇到这种情况:一道题想出思路后,一般都习惯性的百度一下有没有“现成的函数”可以调用,往往收获不菲,增长很多奇奇怪怪的知识。而这些“现成的函数”大部分都来自于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!!
*/
如果有什么建议或疑问,可以给笔者留言哦,本条博文也会不定时更新,优化。