先导课:STL 是什么、三大核心组件、所有容器共享的通用操作 —— 在认识每个具体容器之前,先建立整体的知识地图。
11.0
想象一下,你有一大堆乐高积木,每次想搭一个城堡都要自己从零开始做每一块砖——这太累了!如果有人提前给你准备好了各种形状的积木块:长方形的基础块、可以转动的轮子、连接用的铰链……你只需要把它们拼起来就行了。
STL 就是 C++ 给程序员准备的"积木工具箱"。它里面装好了编程时最常用的一些数据结构:可以自动变长的数组、可以两头操作的队列、可以快速查找的字典……我们不再需要从零开始写这些复杂的东西,直接用就好。
begin() 指向第一个元素,end() 指向最后一个元素之后的位置(标记"结束了")。
好消息是,几乎所有 STL 容器都共享一套相同的操作。就像一个工具箱里的所有工具都有"拿起来"和"放下去"这两个动作一样,无论你用 vector 还是 list,下面这些操作你都能用:
| 函数 / 类型 | 功能 | 返回值 |
|---|---|---|
| .size() | 返回容器中元素的个数 | size_t(无符号整数) |
| .empty() | 判断容器是否为空 | bool(空为 true) |
| .clear() | 清空所有元素 | 无 |
| .begin() | 返回指向第一个元素的迭代器 | 迭代器 |
| .end() | 返回指向尾后(最后一个元素之后) | 迭代器 |
| .front() | 返回第一个元素的引用 | 元素的引用 |
| .back() | 返回最后一个元素的引用 | 元素的引用 |
| .swap(b) | 交换两个同类容器的全部内容 | 无(void) |
| ::iterator | 容器的迭代器类型 | 类型名 |
front() / back() 在 stack、queue 等容器适配器中会有所限制(比如 stack 没有 front()),具体细节会在对应章节里说明。这张表概括的是大多数序列容器和关联容器共有的接口。下面五大类一共 13 个专题,建议按顺序学习——序列容器是最基础的,后面的容器适配器、关联容器都会用到序列容器的概念。