作用是将一个数组排序,默认是从小到大进行排列,也可以通过增加参数改为从大到小进行排序。
用法:sort(数组名+开始位置,数组名+结束位置+1);(开始位置是0可以不写)
如:给a[0一n-1]进行排序sort(a,a+n),给a[1-n]进行排序sort(a+1,a+1+n)
int a[7]={8,5,13,22,3,1,2};
sort(a,a+7); //默认从小到大进行排序
for(int i=0;i<7;i++)//输出:1 2 3 5 8 13 22
cout<<a[i]<<' ';
//--------------------------------------------
sort(a,a+7,greater<int>()); //增加一个参数greater(),变为从大到小排序
for(int i=0;i<7;i++) //输出:22 13 8 5 3 2 1
cout<<a[i]<<' ';
其作用是元素去重,即删除序列中所有相邻的重复元素。
其删除元素,只是一个伪去除,只是重新排列了序列中的元素,将相邻的重复元素添加到容器末尾。简单来说,使用 unique() 后,容器的长度没有变,只是元素顺序改变了。
其返回值是去重之后的尾地址,减去数组 a 的起始地址后所得到的就是 a 中去重后的元素个数。
用法:unique(数组名+开始位置,数组名+结束位置+1)-数组名-开始位置;(与sort()类似)
如:将a[1-n](已经排好序了)进行去重int len=unique(a+1,a+n+1)-a-1;
int a[12]={1,1,1,2,2,3,3,3,4,5,6,6};
int len=unique(a,a+12)-a;
cout<<len<<endl; //len=6
for(int i=0;i<12;i++) //1 2 3 4 5 6|3 3 4 5 6 6
cout<<a[i]<<' ';
注意:用unique去重之前要先排序。
sort(a,a+n);
int len=unique(a,a+12)-a;
作用是求出一个数的二进制形式中有多少个1
用法:__builtin_popcount(int x);
int x=__builtin_popcount(5); //5->101
cout<<x<<endl; //x=2
//----------------------------------------
int x=__builtin_popcount(8); //8->1000
cout<<x<<endl; //x=1
作用是求出一个数组中的最大值,函数返回这个数组中最大值位置的地址。
用法:int x=*max_element(数组名+开始位置,数组名+结束位置+1)(注意要加*);
int a[7]={8,5,13,22,3,1,2};
int x=*max_element(a,a+7);
cout<<x<<endl; //x=22
//-----------------------------------
int a[7]={8,5,13,22,3,1,2};
int *x=max_element(a,a+7); //x=22,位置是a[2]
*x=5;
cout<<*x<<' '<<a[2]<<endl; //x=a[2]=5
作用是求出一个数组中的最小值,函数返回这个数组中最小值位置的地址。
用法:int x=*min_element(数组名+开始位置,数组名+结束位置+1)(注意要加*);
int a[7]={8,5,13,22,3,1,2};
int x=*min_element(a,a+7);
cout<<x<<endl; //x=1
作用是求出两个数的最小公倍数。有了这个函数,gcd()就不用自己手写了。
用法: __gcd(int x,int y);
int x=__gcd(3,9);
cout<<x<<endl; //x=3
作用是给数组中的数赋值。这个函数比memset要灵活很多,可以给数组中的数赋任意值。
用法:fill(数组名+开始位置,数组名+结束位置+1,要赋的值);
如:把a[1-n]都赋成6 fill(a+1,a+n+1,6);
int a[12]={1,1,1,2,2,3,3,3,4,5,6,6};
fill(a,a+12,6);
for(int i=0;i<12;i++) //6 6 6 6 6 6 6 6 6 6 6 6
cout<<a[i]<<' ';
作用是判断字符串2是否为字符串1的子串,如果是则返回字符串2在字符串1中第一次出现位置的地址。不是则返回空(null)。有点像string中的find()函数
用法:strstr(char字符串1,char字符串2);
char a[]="abcdefgh";
char b[]="cde";
cout<<strstr(a,b)<<endl; //cdefgh
上面是我在做题的时候积累的一些函数,以后遇见了新的函数我还会继续往里加的。