STL和其他的一些东西

尽管巨佬都说:“STL常数大,你手写它不香吗?”

但是,STL确实很香。。。

queue

首先,查一下词典

所以,其实就是一个先进先出的容器

1
2
3
4
5
6
queue<变量名> q; //存的变量可以是int,char等,也可以是struct等
q.front(); //返回队首元素的值
q.pop(); //弹出队首元素
q.size() //返回队列的大小
q.push(x) //把x压到队尾
q.empty() //返回1为空,0为有元素

用处见BFS

stack

还是查一下字典

可以发现,stack是一个后进先出的容器

1
2
3
4
5
6
stack<变量名> st; //存的变量可以是int,char等,也可以是struct等
st.top(); //返回栈顶元素的值
st.pop(); //弹出栈顶元素
st.size() //返回栈的大小
st.push(x) //把x压到栈顶
st.empty() //返回1为空,0为有元素

vector

vector,可以当数组用,但又比数组高级!!!当然会更慢qwq

1
2
3
4
5
6
7
8
9
10
11
12
13
vector<变量名> v;
基础操作有:
push_back()
clear()
empty()
size()
reverse()
begin()
end()
erase()
swap()
insert()
//不会请自行恶补。。。

大家应该都不喜欢写for(int i=0;i<v.size();i++),所以

for(auto x:v)就可以遍历元素了!!!

vector常被在图论中用了存图

bitset

bitset 是标准库中的一个存储 0/1的大小不可变容器。严格来讲,它并不属于 STL。

使用bitset可以吧时间复杂度降低到原来的132\frac{1}{32},可以用来卡时限

1
2
3
4
5
6
7
8
9
10
11
12
13
bitset<大小(即多少位)> bs;
bs[] //访问特定位
size() //大小
reset() //清空
set() //设为1
to_string() //转为字符串
_Find_first() //找第一个1
_Find_next(pos) //找pos后的第一个1
//与另一个bitset可以进行一下运算
== !=
& &= | |= ^ ^= ~
<< >> <<= >>=
//可以cin,cout

priority_queue

优先队列,在O(logn)O(logn)的时间复杂度内实现了插入,查询最值,删除最值

1
2
3
4
5
6
7
8
9
10
11
12
13
priority_queue<变量名> //默认返回最大值
priority_queue<变量名,vector<变量名>,greater<变量名>> //返回最小值,且变量的优先级已经确定
priority_queue<变量名,vector<变量名>,cmp> //自定义排序
//cmp这么写
struct cmp
{
bool operator()(node a,node b)
{
if(a.x == b.x) return a.y >= b.y;
else return a.x > b.x;
}
};

pair

pair相当于一个只能放两个元素的struct,但sort是优先按第一关键字排序

string

和char数组差不多,但支持±运算 注意+是O(n)的