以下的内容主要来介绍STL中的常见函数,也就是包含于algorithm头文件内的部分简单算法函数。我的自学笔记内容可能并不深入,因此欢迎各位大佬提出建议!在此感谢啦Or2
sort 函数
sort 函数简介
sort 函数是进行数组排序的函数,其排序时间复杂度平均为 n log n n\log _n nlogn,也就是与快排类似。但sort 函数在实际操作中较手写快排相对更快。因此还是使用sort 比较方便。
sort 函数用法
sort 函数有2或3个参数。其中前两个参数表示数组需要排序的起始部分和结束部分的地址,最后一个可以选择加入的参数是比较方式的函数。如果不加入,则默认采用升序排序。当然,我们也可以这么写,来做到升序和降序排序。
sort(a,a+n,std::less<int>());//升序排序
sort(a,a+n,std::greater<int>());//降序排序
在上面的代码中应当注意的还有,a+n表示的是指针加法,也就是a[0]之后的n个数的地址,即&a[n]。即 sort(a,a+n); 与 sort(&a[0],&a[n]); 等价。
unique 函数
unique 函数简介
unique 函数是一个用来在数组中去除重复元素的函数,返回值是去重之后的尾地址。
首先应当注意的是,unique 函数的作用机制是比较数组中的相邻两个数据,如果两者相同则保留一个。因此,使用unique 函数之前必须先进行排序。
另外,值得注意的是unique 函数不会把原来数组“多占”的位置进行初始化或清空,而是让其保留了一些不知来源的数据(没有深究unique 函数的底层呜呜呜)。但这些数据并不是与保存的数据组合在一起并不会构成原有的数组集合,因此不能说unique 函数会把重复的数据放在数组末尾!
最后来看一个愚蠢的例子:
#include <iostream>
#include <algorithm>
#define emm 11
using namespace std;
int main(){
int a[] = {3,9,7,1,2,6,8,5,3,3,7,6};
int n = emm;
sort(a,a+n);
n = unique(a,a+n) - a;
cout<<n<<endl;
for (int i=0;i<emm;i++) printf("%d ",a[i]);
return 0;
}
输出结果为:
8
1 2 3 5 6 7 8 9 7 8 9
暂时结束,随学随更233333