STL 总结

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编程(有删减)


未完待续

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值