简单的STL
Tip
STL说白了就是我们《数据结构》里装数据的各种容器,不懂的可以去看看我C++基础专栏,cpp语法其实和c没什么大区别,并且cpp兼容c的语法,不会输出输入流这些还是用c语言的语法习惯也可以
B站讲解
CSDN
## 1. 🧰 什么是 STL STL(Standard Template Library,标准模板库)是 C++ 为程序员准备的“超级兵器库”。 意思是:
它提前帮你写好了绝大多数常用的数据结构和算法。 例如:
不用自己写代码维护一个队列的头和尾。 不用自己手搓排序算法。 直接调包,拿来就用。
2. ⚡ 为什么算法和竞赛必用
省时间:敲几个字母就能实现复杂的数据结构。 稳如老狗:经过千锤百炼,几乎没有 Bug,性能极高。 Dijkstra、A* 甚至状态空间搜索,如果不依赖 STL,代码量会翻倍,甚至极其容易写错。
3. 📦 vector(动态数组)
它是可以自动伸缩的数组。 适用场景:
不知道数据具体有多少个的时候。
图论中存图(邻接表,就像前面 Dijkstra 里的 vector<pair<int,int>> g[N])。
核心操作:
push_back(x):把 x 塞到尾巴上。
size():问问里面有几个元素。
clear():一键清空。
4. 🚶 queue & stack(排队与叠盘子)
两者都是限制你拿东西位置的容器。 queue(队列):
像食堂排队,先进先出(FIFO)。
主要用于 BFS(广度优先搜索)。
push() 排尾巴,front() 看队头,pop() 走人。
stack(栈):
像叠盘子,后进先出(LIFO)。
主要用于 DFS(深度优先搜索)、括号匹配计算。
push() 放顶上,top() 看顶上,pop() 拿走顶上。
5. 👑 priority_queue(优先队列/堆)
自带“VIP 插队机制”的排队系统。 特点:
不论你按什么顺序放进去,它总能让“最大”或“最小”的元素自动排在最前面。 这就是 Dijkstra 找“距离起点最近的点”和 A* 找“最小 F 值”的核心引擎! 用法:
push() 扔进去,top() 拿最极端的,pop() 删掉。
6. 📖 set & map(自动排序与超级字典)
它们底层一般是红黑树,极其聪明。 set(集合):
装进去的数据会自动排序,并且自动去重。 适合用来判断“某个状态是不是已经存在了”。 map(映射):
超级字典,突破了数组下标只能是数字的限制。
map<string, int> m;
可以直接写 m["张三"] = 100;,查名字直接得分数。
7. 🛠️ algorithm(神级函数库)
只需 #include <algorithm>,直接获得各种神技:
sort():全宇宙最常用的快排,一行代码排好序。
reverse():把数组或字符串直接倒过来。
lower_bound():自带的二分查找,一秒找出数组里第一个大于等于 x 的数字。
8. 💣 常见坑点 (RE/TLE 警告)
空手套白狼(运行崩溃):
当 queue 或 stack 里面没东西时,千万不能 pop() 或 top(),一碰就死(段错误)。
传参不加引用(严重超时):
写函数时 void dfs(vector<int> v),每次调用都会把整个数组复制一遍。
一定要加 &,变成 void dfs(vector<int>& v)。
越界访问:
vector 只有 3 个元素,你非要访问 v[10],直接越界报错。
9. 💡 一句话理解
STL 就是 C++ 给你的外挂包,它替你把“造轮子”的脏活累活全干了,让你把所有脑力都集中在“想算法”上。