沐晴の编程blog
首页项目归档照片墙音乐说说杂谈🌳 灵境友链关于
封面

stl库

写作时间:2026-08-23

stl库可以说是c++编程的一大创新之处,也是我最开始接触c++的一部分,里面包含了很多的底层容器,包括vector,map,queue,stack,deque,priority_queue,set以及和它们一起使用的pair,tuple等,我们一个一个介绍:

首先,vector,动态容器,作为可以随时扩容的数组,很多时候用在不清楚具体的大小元素读入时,当然普通数组能实现的功能它都能实现,也可以直接把数组替换为vector;

然后一起介绍一下两个容易弄混的容器,queue和stack,queue顾名思义,就是像队列一样,先进先出,而stack可以理解成一个井,先进后出,queue在dijistra算法中,通过维护队顶元素的最小值,以找到最终的最优选择(顺带一提,bfs求最短路如果权值只有0,1则需要双端队列去维护),同时在bfs中同样可以用到,得益于其单向弹出的特点,stack,最常见的用法应该就是单调栈,去维护一个区间的最大或最小值,确保栈内元素单调递增或者递减

vector<int> a(n);

stack<int> st;

vector<int> res(n);

for(int i=n-1;i>=0;i--)

{

while(!st.empty() &amp;&amp; a[st.top()] &gt;= a[i]) st.pop();

res[i] = st.empty() ? -1 : st.top();

st.push(i);

}

同时,stack也可以实现非递归dfs

map,这个我个人认为最好用的容器,很多时候都是通过键值的直接匹配关系,去降低匹配的复杂度,map底层是红黑树,内部元素是根据键进行排序的,而哈希表,unordered_map,是无序的,同样是键值匹配的关系,它的用法很灵活,可以在练题的过程中去感受

再然后是priority_queue,很多时候是在贪心的时候一起使用,因为其内部的元素总是有序的,

还有set,最大的特点是内部元素不会重复,但如果只是为了去重,我更喜欢用vector内部的函数,a.erase(unique(a.begin(),a.end()),a.end()),去重之前记得一定要先排序。

avatar

沐晴

苦命计算机学生一枚^_^

RECOMMENDED

图上问题

2026-08-21

字符串总结

2026-08-23

字符串

2026-08-22

© 2026 沐晴の编程blog川公网安备 51012202002558号