STL 总结
先贴一个网址: c++常用库函数
1、stack
#include<stack>
stack<int> sta;
2、queue
#include<queue>
queue<int> que;
3、priority_queue
模板声明带有三个参数:
priority_queue<Type, Container, Functional>
Type 为数据类型, Container 为保存数据的容器,Functional 为元素比较方式。Container 必须是用数组实现的容器,比如 vector, deque, 但不能用 list。如果把后面两个参数缺省,优先队列就是大顶堆。
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
priority_queue<int> q1;
priority_queue< int, vector<int>, greater<int> > q2;
int A;
int main()
{
while(scanf("%d", &A), A){
q1.push(A);
q2.push(A);
}
while(!q1.empty()){
printf("%d ", q1.top());
q1.pop();
}//big -> small
puts("");
while(!q2.empty()){
printf("%d ", q2.top());
q2.pop();
}//small -> big
return 0;
}
4、rand() & srand()
srand((int) time(0));//unsigned
printf("%d", rand());
(A,B) (rand() % (B-A+1)) + A-1;
[A,B) (rand() % (B-A)) + A;
(A,B] (rand() % (B-A)) + A+1;
[A,B] (rand() % (B-A+1)) + A.
5、vector
#include<vector>
vector<int> vec;
vec.push_back(a);
//尾部插入数字
cout<<vec[0]<<endl;
//使用下标访问元素
vector<int>::iterator it;
for(it = vec.begin(); it != vec.end(); it++) cout << *it << endl;
//使用迭代器访问元素
vec.insert(vec.begin()+i, A);
//在第i+1个元素前面插入A;
vec.erase(vec.begin()+i);
//删除第i个元素
vec.erase(vec.begin()+i, vec.begin()+j);
//删除区间[i,j-1];区间从0开始
vec.size();
//向量大小
vec.clear();
//清空
sort(vec.begin(), vec.end(), cmp);
//排序 (small -> big)
6、map
#include<map>
map<int, int> ma;
ma.begin();
//返回指向头部的迭代器
ma.end();
//返回指向末尾的迭代器
ma[i] = A;
//插入 A
ma.erase(i);
//删除 i
ma.clear();
//删除所有元素
ma.count(i);
//返回 i 出现的次数
ma.find(i);
//查找 i (若未找到返回 end())
ma.empty();
//如果map为空则返回true
ma.swap();
//交换两个map
ma.lower_bound();
//返回 >=给定元素的第一个位置
ma.upper_bound();
//返回 >给定元素的第一个位置
ma.size();
//返回map中元素的个数
ma.max_size();
//返回可以容纳的最大元素个数
7、set
和 map 用法基本相同
#include<set>
set<int> se;
贴一张表
容器类名 | 特性 | 何时使用 |
---|---|---|
vector(向量) | 在内存中占有一块连续的空间,存储一个元素序列。可以看作一个可自动扩充的动态数组,而且提供越界检查。可用[]运算符直接存取数据。 | 需要快速查找,不在意插入/删除的速度快慢。能使用数组的地方都能使用向量。 |
list(列表) | 双向链接列表,每个节点包含一个元素。列表中的每个元素均有指针指向前一个元素和下一个元素。 | 需要快速的插入/删除,不在意查找的速度慢,就可以使用列表。 |
deque(双端队列) | 在内存中不占有一块连续的空间,介于向量和列表之间,更接近向量,适用于由两端存取数据。可用[]运算符直接存取数据。 | 可以提供快速的元素存取。在序列中插入/删的速度除较慢。一般不需要使用双端队列,可以转而使用vector或list。 |
set(集合)/multiset(多集) | set是一个元素集合。集合中的元素按有序的方式存储。set中没有重复的元素,但multiset中允许有重复的元素。 | 需要使用元素集合,而且对元素的查找、插入和删除操作都较为频繁时,就可以使用set/multiset。 |
map(映射)/multimap(多映射) | map是{键(key),值}对的组成的集合。集合中的元素按键排列。multimap是允许键/值对有重复的集合。map和multimap的关系如同set和multiset之间的关系。 | 如果希望将键/与值相关联就可以使用map/muitimap。 |
摘自: C++类模板与STL编程(有删减)
未完待续