c++容器的常用函数
·
1. std::vector<T>(动态数组)
| 功能 | 方法 | 说明 |
|---|---|---|
| 插入 | push_back(x) | 尾部插入 |
emplace_back(args...) | 尾部原位构造(C++11) | |
insert(it, x) | 在迭代器位置插入 | |
| 删除 | pop_back() | 删除尾元素 |
erase(it) / erase(first, last) | 删除指定位置或范围 | |
clear() | 清空所有元素 | |
| 访问 | operator[](i) / at(i) | 随机访问(at 带边界检查) |
front() / back() | 首/尾元素引用 | |
data() | 返回底层指针(C 风格数组) | |
| 容量 | size() | 元素个数 |
empty() | 是否为空 | |
capacity() | 当前分配内存可容纳元素数 | |
reserve(n) | 预分配至少 n 个元素空间 | |
shrink_to_fit() | 释放未使用内存(非强制) | |
| 迭代器 | begin() / end()rbegin() / rend() | 正向/反向迭代器 |
2. std::deque<T>(双端队列)
| 功能 | 方法 | 说明 |
|---|---|---|
| 插入 | push_back(x) / push_front(x) | 尾/头插入 |
emplace_back(...) / emplace_front(...) | 原位构造(C++11) | |
insert(it, x) | 中间插入(O(n)) | |
| 删除 | pop_back() / pop_front() | 删除尾/头元素 |
erase(it) / clear() | 同 vector | |
| 访问 | operator[](i) / at(i) | 随机访问 |
front() / back() | 首/尾元素 | |
| 容量 | size() / empty() | 同 vector |
❌ 无 capacity() / reserve() | 不支持预分配 | |
| 迭代器 | begin() / end() / rbegin() / rend() | 支持双向遍历 |
3. std::list<T>(双向链表)
| 功能 | 方法 | 说明 |
|---|---|---|
| 插入 | push_back(x) / push_front(x) | 头尾插入 O(1) |
emplace_back(...) / emplace_front(...) | 原位构造 | |
insert(it, x) | 任意位置插入 O(1) | |
| 删除 | pop_back() / pop_front() | 头尾删除 |
erase(it) | 删除指定位置 O(1) | |
remove(value) | 删除所有等于 value 的元素 | |
clear() | 清空 | |
| 特殊操作 | splice(it, other_list) | 移动另一 list 的节点(O(1)) |
merge(other) | 合并两个已排序 list | |
sort() | 对 list 排序(不能用 std::sort) | |
unique() | 删除相邻重复元素 | |
| 访问 | front() / back() | 仅支持首尾访问 |
| 容量 | size() / empty() | C++11 起 size() 为 O(1) |
| 迭代器 | begin() / end() / rbegin() / rend() | 双向迭代器 |
4. std::stack<T>(栈,LIFO)
#include <stack>
// 默认底层容器:deque(也可用 vector 或 list)
std::stack<int, std::vector<int>> s;
| 功能 | 方法 | 说明 |
|---|---|---|
| 插入 | push(x) / emplace(args...) | 入栈(顶部) |
| 删除 | pop() | 出栈(不返回值) |
| 访问 | top() | 访问栈顶元素 |
| 容量 | empty() / size() | 判断空/获取大小 |
| 限制 | ❌ 无迭代器 ❌ 不能遍历 ❌ 不能随机访问 | 仅暴露栈接口 |
5. std::queue<T>(队列,FIFO)
| 功能 | 方法 | 说明 |
|---|---|---|
| 插入 | push(x) / emplace(args...) | 入队(尾部) |
| 删除 | pop() | 出队(头部,不返回值) |
| 访问 | front() / back() | 访问队首/队尾 |
| 容量 | empty() / size() | 判断空/获取大小 |
| 限制 | ❌ 无迭代器 ❌ 不能遍历 | 仅暴露队列接口 |
6. std::set<Key>(有序集合,唯一)
| 功能 | 方法 | 说明 |
|---|---|---|
| 插入 | insert(key) | 插入(自动去重+排序) |
emplace(args...) | 原位构造 | |
| 删除 | erase(key) / erase(it) | 按 key 或迭代器删除 |
clear() | 清空 | |
| 查找 | find(key) | 返回迭代器(未找到为 end()) |
count(key) | 返回 0 或 1 | |
lower_bound(k) / upper_bound(k) | 范围查询 | |
| 访问 | ❌ 不能修改 key ✅ 可通过迭代器读取 | 元素为 const Key |
| 容量 | size() / empty() | — |
| 迭代器 | begin() / end()(升序)rbegin() / rend()(降序) | 自动按键排序 |
💡 底层:红黑树,O(log n) 操作。
7. std::map<Key, T>(有序键值对,key 唯一)
| 功能 | 方法 | 说明 |
|---|---|---|
| 插入 | insert({k, v}) | 安全插入(不覆盖) |
operator[](k) = v | 会插入默认值(慎用!) | |
emplace(k, v) | 原位构造 | |
| 删除 | erase(key) / erase(it) | — |
| 查找 | find(key) | 返回 pair<const K, V>* 迭代器 |
count(key) | 0 或 1 | |
at(key) | 安全访问(越界抛异常) | |
| 访问 | operator[](key) | 可读写 value(但会插入!) |
通过迭代器:it->first / it->second | — | |
| 容量 | size() / empty() | — |
| 迭代器 | begin() / end()(按 key 升序) | — |
⚠️ 重要:
map["new_key"]若 key 不存在,会默认构造 value 并插入。- 安全读取用
m.at("key")或auto it = m.find("key"); if (it != m.end()) ...
总结:一句话记住核心方法
| 容器 | 核心方法 |
|---|---|
vector | push_back, [], size, begin/end |
deque | push_front, push_back, [] |
list | push_front, splice, sort, remove |
stack | push, pop, top |
queue | push, pop, front, back |
set | insert, find, count |
map | insert, operator[](小心!), find, at |
- 日常开发优先用
vector。 - 需要排序/去重 →
set/map。 - 需要 LIFO/FIFO →
stack/queue。 - 高频中间插入 →
list。 - 双端操作 →
deque。
更多推荐
所有评论(0)