STL指的是C++的标准模板库,它包括一些算法和容器,这篇文章将会总结一些常用的STL(参考自《算法竞赛入门经典》)
- 排序与检索
- 不定长数组:vector
- 集合:set
- 映射:map
- 栈,队列与优先队列
- 测试STL(略)
- 应用
1.排序与检索
#include<bits/stdc++.h>
using namespace std;
int a[]={10,0,2,5,6,7};
int main(){
sort(a,a+6);
for(int i=0;i<6;i++) cout<<a[i];
return 0;
}
//0256710
sort使用数组元素默认的大小比较运算符进行排序,只有在需要按照特殊依据进行排序时才需要传入额外的比较函数。
sort数组的默认排序顺序是从小到大的,可以自定义一个compare函数来改变排序方式,也可以通过C++中的比较函数less,greater,这样就不需要我们自己家重新写比较函数了。
#include<bits/stdc++.h>
using namespace std;
int a[]={10,0,2,5,6,7};
int cmp(int a,int b){
return a>b;
}//从大到小
int main(){
sort(a,a+6,cmp);
//sort(a,a+6,greater<int>());
//sort(a,a+6,less<int>());
for(int i=0;i<6;i++) cout<<a[i]<<" ";
return 0;
}
//10 7 6 5 2 0
algorithm头文件中的sort可以给任意对象排序,排序对象可以存在一个普通数组里(sort(a,a+n))也可以存在vector里(使用sort(v.begin(),v.end()调用)包括内置类型和自定义类型,前提是类型定义了“<”运算符。排序之后可以用lower_bound查找大于或者等于x的第一个位置。待排序、待查找的元素可以放在数组里,也可以放在vector里。
(还有一个unique函数课一删除有序数组中的重复元素)
2.不定长数组:vector
vector就是个不定长数组,不仅如此,它把一些常用的操作封装在了vector类型内部。
例如,我们假设a是一个vector,vector<int> a;
读取大小:a.size();
改变大小:a.resize();
向尾部添加元素:a.push_back();
删除最后一个元素:a.pop_back();
清空:a.clear();
测试是否为空:a.empty();
vector可以直接赋值,也可以作为函数的参数或者返回值,而无需像传递数组那样另外用一个变量指定元素个数。