STL (Standard Template Library,标准模板类库)。
特点:
1.提供了常用的数据结构模板类和丰富的操作函数。
2.所有组件都是用模板方式定义的,全面支持泛型,强调的石让数据的结构和算法独立于其类型。
STL三大件:容器(container)、算法(algorithm)、迭代器(iterator)
一、容器
顺序容器:vector(向量)、list(链表)、deque(双端队列)
关联容器:set(集合)/multiset(多重集合)、map(映射)/multimap(多重映射)
适配器容器:stack(栈)、queue(队列)、priority_queue(优先级队列)
哈希容器:hash_map(hash_multimap、hash_set、hash_multiset)
1.vector(向量)
vector相当于动态数组,可以从尾部快速的插入和删除元素,快速随机访问元素,在序列中间插入和删除时,需要移动后面的元素。
主要函数:
max_size():最大元素个数
size():实际个数
resize(n):调整容器大小
empty():判断是否为空
at():返回指定位置元素
front():获取第一个元素
back():获取最后一个元素
assign():给元素赋值
insert():插入
push_back():尾部插入一个元素
pop_back():删除尾部元素
clear():删除所有元素
begin():正向迭代,返回第一个元素的位置
end():正向迭代,返回最后一个元素的位置
rbegin():反向迭代,返回最后一个元素的位置
rend():反向迭代,返回第一个元素的位置
小例子:
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(int &x,int &y) {
return x>y;
}
int main() {
int a[10]={2,4,1,6,8,12,67,45,89,456};
vector <int> vec(a,a+10);
printf("size:%d\n",vec.size());
printf("正向输出vec:");
vector<int>::iterator it,it1;
for(it=vec.begin();it!=vec.end();it++) {
printf("%d\t",*it);
}
printf("\n");
int x=6;
it1 = find(vec.begin(),vec.end(),x);
if(it1!=vec.end()) {
printf("find it = %d\n",*it1);
}else {
printf("Not find it.\n");
}
printf("递减排序vec:\n");
sort(vec.begin(),vec.end(),cmp);
vector<int>::reverse_iterator rit;
printf("反向输出vec:");
for(rit = vec.rbegin();rit!=vec.rend();++rit) {
printf("%d\t",*rit);
}
printf("\n");
return 0;
}