跳转至

简单的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 警告)

空手套白狼(运行崩溃):

queuestack 里面没东西时,千万不能 pop()top(),一碰就死(段错误)。 传参不加引用(严重超时):

写函数时 void dfs(vector<int> v),每次调用都会把整个数组复制一遍。 一定要加 &,变成 void dfs(vector<int>& v)。 越界访问:

vector 只有 3 个元素,你非要访问 v[10],直接越界报错。

9. 💡 一句话理解

STL 就是 C++ 给你的外挂包,它替你把“造轮子”的脏活累活全干了,让你把所有脑力都集中在“想算法”上。