首页 / 第十一章 · STL 标准模板库 / 11.0 STL 是什么

十一、STL 标准模板库

先导课:STL 是什么、三大核心组件、所有容器共享的通用操作 —— 在认识每个具体容器之前,先建立整体的知识地图。

STL 是什么

想象一下,你有一大堆乐高积木,每次想搭一个城堡都要自己从零开始做每一块砖——这太累了!如果有人提前给你准备好了各种形状的积木块:长方形的基础块、可以转动的轮子、连接用的铰链……你只需要把它们拼起来就行了。

STL 就是 C++ 给程序员准备的"积木工具箱"。它里面装好了编程时最常用的一些数据结构:可以自动变长的数组、可以两头操作的队列、可以快速查找的字典……我们不再需要从零开始写这些复杂的东西,直接用就好。

🧰
STL 的全称是 Standard Template Library(标准模板库)。它最厉害的地方在于:数据存储和数据操作是分开的。比如排序算法写好了之后,既可以用来排序数组,也可以用来排序链表——因为算法不关心数据存在哪里,只关心怎么访问数据。
三大核心组件
📦
容器 Containers
装数据的"箱子"
vector · list · deque
stack · queue
set · map …
⚙️
算法 Algorithms
对数据做操作的"工具"
sort · find
reverse · count …
🔗
迭代器 Iterators
连接容器和算法的"桥梁"
begin() · end()
就像一个智能指针
💡
迭代器可以理解为一个"智能指针",它知道如何在你选用的容器中移动。begin() 指向第一个元素,end() 指向最后一个元素之后的位置(标记"结束了")。
所有容器的"通用技能"

好消息是,几乎所有 STL 容器都共享一套相同的操作。就像一个工具箱里的所有工具都有"拿起来"和"放下去"这两个动作一样,无论你用 vector 还是 list,下面这些操作你都能用:

函数 / 类型功能返回值
.size()返回容器中元素的个数size_t(无符号整数)
.empty()判断容器是否为空bool(空为 true)
.clear()清空所有元素
.begin()返回指向第一个元素的迭代器迭代器
.end()返回指向尾后(最后一个元素之后)迭代器
.front()返回第一个元素的引用元素的引用
.back()返回最后一个元素的引用元素的引用
.swap(b)交换两个同类容器的全部内容无(void)
::iterator容器的迭代器类型类型名
📌
注意:front() / back()stackqueue 等容器适配器中会有所限制(比如 stack 没有 front()),具体细节会在对应章节里说明。这张表概括的是大多数序列容器和关联容器共有的接口。
接下来要学什么

下面五大类一共 13 个专题,建议按顺序学习——序列容器是最基础的,后面的容器适配器、关联容器都会用到序列容器的概念。