常用 STL 总结

  1. vector

vector 是变长数组,支持随机访问。

#include<vector>

vector<int> a; //长度动态变化的int数组
vector<int> a(n); //给定了空间 相当于int a[n];
vector<int> a(n,val) //n个值初始化为val
vector<int> a[n] //一个长度为n的数组,数组的每个元素都是一个vector,相当于一维是固定的,二维是动态的
vector<vector<int> > //两维都是动态的
vector<vector<int>> v(n,vector<int>(m,0)); //n*m的二维数组,初始化为0
a.size() //长度
a.empty() //判断是否为空 返回bool值 
a.clear() //清空
a.push_back(x) //x插入vector的尾部
a.pop_back() //删除vector的最后一个元素
a.begin()/a.end()
//begin()返回指向vector中第一个元素的迭代器。*a.begin()等价于 a[0]
//end()返回vector的尾部,n个元素之后的边界位置。
a.front()/a.back()//分别返回vector的第一个和最后一个元素
  1. 队列

#include<queue>
queue<int> q;

priority_queue<int> q; //大根堆
priority_queue<int,vector<int>,greater<int> > q; //小根堆

//循环队列 queue
push //队尾插入
pop  //对头弹出
front //返回对头元素
back //返回队尾元素

//优先队列 根堆
push //插入堆
pop //删除堆顶元素
top //查询堆顶元素
#include<stack>
push //入栈
pop //出栈
  1. 双端队列

双端队列deque是一个支持在两端高效插入或删除元素的连续线性存储空间。它就像是vector和queue的结合。与vector相比,deque在头部增删元素仅需要 O(1)O(1) 的时间;与queue相比,deque像数组一样支持随机访问。--yxc

deque<int> d;
d[] //随机访问
begin/end       // 返回deque的头/尾迭代器
front/back      // 队头/队尾元素
push_back       // 从队尾入队
push_front      // 从队头入队
pop_back        // 从队尾出队
pop_front       // 从队头出队
clear           // 清空队列

5.set

头文件set主要包括set和multiset两个容器,分别是“有序集合”和“有序多重集合”,即前者的元素不能重复,而后者可以包含若干个相等的元素。set和multiset的内部实现是一棵红黑树,它们支持的函数基本相同。

set中的每个元素只出现一次(参照数学中集合的互斥性),并且是排好序的(默认按键值升序排列)。

#include<set>
set<int> q;
set<int,greater<int> > q;

q.insert(x) //插入x
q.erase(x) //删除q中的x元素。若存在x返回1,否则返回0
q.clear() //清空q
q.empty() //判断是否为空
q.size() //返回q中元素个数
q.find(x) //在q中查找x,返回x的迭代器,若x不存在,则返回指向q尾部的迭代器即 q.end()
q.lower_bound(x); //返回一个迭代器,指向第一个键值不小于x的元素
q.upper_bound(x); //返回一个迭代器,指向第一个键值大于x的元素
q.count(x) //返回q中x的个数
  1. map

map容器是一个键值对key-value的映射,其内部实现是一棵以key为关键码的红黑树。Map的key和value可以是任意类型,其中key必须定义小于号运算符。

#include<map>

map<int,int> mp;
size/empty/clear/begin/end //类似上
insert/erase //与set类似,但其参数均是pair<key_type, value_type>
find //h.find(x)在变量名为h的map中查找key为x的二元组。
[]操作符 //h[key]返回key映射的value的引用,时间复杂度为 O(logn)O(logn)。
//[]操作符是map最吸引人的地方。我们可以很方便地通过h[key]来得到key对应的value,还可以对h[key]进行赋值操作,改变key对应的value。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值