STL函数总结

sort()

作用是将一个数组排序,默认是从小到大进行排列,也可以通过增加参数改为从大到小进行排序。
用法: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()

其作用是元素去重,即删除序列中所有相邻的重复元素。
其删除元素,只是一个伪去除,只是重新排列了序列中的元素,将相邻的重复元素添加到容器末尾。简单来说,使用 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;
__builtin_popcount()

作用是求出一个数的二进制形式中有多少个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
max_element()

作用是求出一个数组中的最大值,函数返回这个数组中最大值位置的地址。
用法: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
min_element()

作用是求出一个数组中的最小值,函数返回这个数组中最小值位置的地址。
用法: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()就不用自己手写了。
用法: __gcd(int x,int y);

	int x=__gcd(3,9);
    cout<<x<<endl;		//x=3
fill()

作用是给数组中的数赋值。这个函数比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]<<' ';
strstr()

作用是判断字符串2是否为字符串1的子串,如果是则返回字符串2在字符串1中第一次出现位置的地址。不是则返回空(null)。有点像string中的find()函数
用法:strstr(char字符串1,char字符串2);

	char a[]="abcdefgh";
    char b[]="cde";
    cout<<strstr(a,b)<<endl;	//cdefgh

上面是我在做题的时候积累的一些函数,以后遇见了新的函数我还会继续往里加的。

你可能感兴趣的:(算法)