C++ STL 常用容器学习笔记 [2026.6.7版] (耗时一天)

一、引言

在 C 语言中,很多东西都需要自己实现,例如用数组模拟栈和队列等等有些复杂的操作实现起来会非常麻烦。

因此,C++ 提供了标准模板库(Standard Template Library, STL),其中封装了很多非常实用的容器,不需要费力去实现它们的细节而直接调用函数来实现很多功能,十分方便。例如,我们之前学过的string其实就是 STL 中的一个容器。

本节课我们会介绍其他几个常见又好用的容器:stack(栈),vector(动态数组),set(集合),map(映射)。

特点

容器 中文名称 核心特点 典型场景
stack 后进先出(LIFO) 表达式求值、括号匹配、递归模拟
vector 动态数组 连续内存、可自动扩容 顺序存储数据、随机访问
set 集合 自动去重、默认升序 快速判重、有序数据维护
map 映射 键值对存储、按键有序 字典 / 哈希表场景、频率统计

关键补充

STL 的优势:

它把数据结构的底层实现全部封装好了,你只需要调用成员函数(如push()、pop()、insert())就能完成复杂操作,不用再像 C 语言那样手动写数组模拟栈、链表等逻辑,大幅提升开发效率。

容器的共性:

大部分 STL 容器都支持 size()(获取元素个数)、empty()(判断是否为空)等通用操作,上手成本很低。

二、栈(stack)

定义方式

stack<int> s;

C++ STL 常用接口

函数 说明
push(x) 将元素 x 压入栈顶
pop() 删除栈顶元素(不返回该元素)
top() 返回栈顶元素的引用(不删除)

三、队列(queue)

普通队列定义方式

queue<int> q;

优先队列定义方式

大根堆(优先把最大值出队)

// 最简写法(默认大根堆)
priority_queue<int> q;
// 完整写法(和上式等价,不常用)
priority_queue<int, vector<int>, less<int>> q;

小根堆(优先把最小值出队)

priority_queue<int, vector<int>, greater<int>> q;

C++ STL 常用接口(普通队列)

函数 说明
push(x) 将元素 x 加入队尾(入队)
pop() 将队首元素移除(出队,不返回元素)
front() 获取队首元素(不删除)
back() 获取队尾元素(不删除)

四、STL 容器通用接口

STL 容器通用操作

函数 说明
size() 返回容器中当前元素的数量
empty() 容器为空返回 true,否则返回 false

补充:vector、set、map 核心接口速记

(和你前面的栈 / 队列接口保持同格式,方便统一记忆)

1. 动态数组(vector)

vector<int> v;
函数 说明
push_back(x) 元素追加到数组末尾
pop_back() 删除数组末尾元素
begin() 获取首迭代器
end() 获取尾迭代器
erase(pos) 删除指定位置元素

2. 集合(set)

set<int> s;
函数 说明
insert(x) 插入元素(自动去重、排序)
erase(x) 删除元素
find(x) 查找元素,找到返回迭代器,否则返回 end()
count(x) 判断元素是否存在(存在返回 1,否则返回 0)

3. 映射(map)

map<string, int> mp;
函数 说明
insert({key, val}) 插入 键值对
erase(key) 删除 指定键的元素
find(key) 查找 键,找到返回迭代器,否则返回 end()
count(key) 判断 键是否存在(存在返回 1,否则返回 0)
mp[key] 访问 或修改键对应的值(键不存在时会自动插入)