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()) ...

总结:一句话记住核心方法

容器核心方法
vectorpush_back, [], size, begin/end
dequepush_front, push_back, []
listpush_front, splice, sort, remove
stackpush, pop, top
queuepush, pop, front, back
setinsert, find, count
mapinsert, operator[](小心!), find, at
  • 日常开发优先用 vector
  • 需要排序/去重 → set/map
  • 需要 LIFO/FIFO → stack/queue
  • 高频中间插入 → list
  • 双端操作 → deque

更多推荐