跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ STL 常用容器入门与实战指南

C++ STL 提供了丰富的容器类型,涵盖动态数组、序列容器及关联容器。梳理了 vector、pair、string、队列、栈、集合及映射等核心容器的特性、内存管理机制及常用 API,并对比了有序与无序容器的时间复杂度差异,帮助开发者快速掌握标准库用法。

锁机制发布于 2026/2/19更新于 2026/10/875 浏览
C++ STL 常用容器入门与实战指南

C++ STL 常用容器入门

STL(Standard Template Library)是 C++ 标准库的核心组成部分,提供了多种高效的数据结构。对于初学者来说,理解不同容器的适用场景和底层机制至关重要。本文将重点讲解 vector、pair、string、队列、栈以及各类集合与映射容器。

vector:动态数组

vector 是最常用的变长数组。它的底层实现采用了'倍增思想':当空间不足时,系统会重新分配更大的内存(通常是原容量的两倍),并将旧数据拷贝过去。这种策略虽然涉及内存拷贝,但能显著减少频繁申请小空间的开销。简单来说,申请一次大空间比申请一千次小空间要快得多。

注意:vector 支持字典序比较运算,可以直接用于排序。

常用操作

  • size(): 获取元素个数。
  • empty(): 判断是否为空。
  • clear(): 清空内容。
  • push_back()/pop_back(): 尾部增删。
  • front()/back(): 访问首尾元素。
  • begin()/end(): 迭代器遍历。
  • []: 下标访问。

pair:二元组

pair 可以看作包含两个变量的结构体,常用于存储键值对或需要同时处理两个属性的场景。

  • 定义: pair<int, int> p;
  • 排序: 默认按字典序,优先比较 first,若相同再比较 second。
  • 嵌套: 如需更多属性,可嵌套使用,如 pair<int, pair<int, int>>。

string:字符串封装

C++ 将字符串进行了对象化封装,方便操作。

  • size()/length(): 获取长度。
  • substr(起始,长度): 截取子串。
  • c_str(): 获取 C 风格字符串指针。

序列容器:队列、栈、双端队列

queue & priority_queue

queue 遵循先进先出(FIFO)。priority_queue 基于堆实现,默认为大根堆。

  • 构造小根堆: 可使用 greater<int> 作为比较函数,或在 push 时插入负值。
  • 常用函数: push(), top(), pop()。

stack

栈遵循后进先出(LIFO)。

  • 常用函数: push(), top(), pop()。

deque

双端队列,功能类似加强版 vector,支持两端插入删除。由于性能开销较大,日常使用频率略低于 vector。

关联容器:Set 与 Map

set / multiset

基于红黑树实现,自动维护有序序列。

  • 特点: set 不允许重复元素,multiset 允许。
  • 复杂度: 大部分操作为 O(log n)。
  • 查找: lower_bound() 返回大于等于 x 的最小迭代器,upper_bound() 返回大于 x 的最小迭代器。

map / multimap

存储键值对,同样基于平衡二叉树。

  • 注意: multimap 不支持直接通过 [] 修改值(因为可能对应多个 key)。
  • 操作: insert(), find(), erase(), lower_bound()。

哈希表容器

unordered_set / unordered_map 系列

这些容器基于哈希表实现,内部无序。

  • 优势: 增删改查平均时间复杂度为 O(1)。
  • 限制: 不支持 lower_bound() 及迭代器的自增/自减操作。

参考总结

以下整理了一份常见的 STL 容器速查表,供日常开发查阅:

// vector: 变长数组,倍增思想
size(), empty(), clear(), front()/back(), push_back()/pop_back(), begin()/end(), []

// pair: 二元组
first, second (字典序比较)

// string: 字符串
size(), length(), empty(), clear(), substr(), c_str()

// queue: 队列
size(), empty(), push(), front(), back(), pop()

// priority_queue: 优先队列 (默认大根堆)
size(), empty(), push(), top(), pop()
// 小根堆示例:priority_queue<int, vector<int>, greater<int>> q;

// stack: 栈
size(), empty(), push(), top(), pop()

// deque: 双端队列
size(), empty(), clear(), front()/back(), push_back()/pop_back(), push_front()/pop_front(), begin()/end(), []

// set, map, multiset, multimap: 基于红黑树
size(), empty(), clear(), begin()/end(), ++/-- (O(logn))
insert(), find(), count(), erase(), lower_bound()/upper_bound()

// unordered_set, unordered_map 系列: 哈希表
增删改查 O(1),不支持 lower_bound/upper_bound 及迭代器自增自减

目录

  1. C++ STL 常用容器入门
  2. vector:动态数组
  3. 常用操作
  4. pair:二元组
  5. string:字符串封装
  6. 序列容器:队列、栈、双端队列
  7. queue & priority_queue
  8. stack
  9. deque
  10. 关联容器:Set 与 Map
  11. set / multiset
  12. map / multimap
  13. 哈希表容器
  14. unorderedset / unorderedmap 系列
  15. 参考总结

更多推荐文章

查看全部
  • PostgreSQL 动态分区裁剪技术:查询性能优化解析
  • Cursor 多智能体协作:8 个 AI 并行编程实战
  • Elasticsearch 与 Kibana 实战:从部署到 C++ 客户端封装
  • AI 绘画为何普遍采用高斯分布作为流匹配源分布
  • DeepSeek 深度使用指南:提示词技巧与本地知识库搭建
  • DeepSeek-R1-Distill-Llama-8B 深度解析:LoRA 微调、长上下文与 KV Cache 优化
  • PUSHI G1 AI+AR 眼镜开源方案与 18 个全场景应用解析
  • 红黑树深入剖析及 Java 实现
  • Java 黑马商城微服务实战:分布式架构开发与部署
  • VRChat 跨语言交流工具 VRCT 使用指南
  • Redis Hash 数据结构详解:C++ 实战与性能优化
  • 前端实现液态玻璃效果
  • ROS 2 机器人编程精通:第四版技术详解与实战指南
  • 利用 Ollama + RAGFlow 部署千问大模型构建个人知识库 AI 智能体
  • Trae + Cline 结合阿里云 Coding Plan 的 AI 编程工作流
  • Windows Python 环境治理(EPGF)系列总览与阅读路线
  • 鸿蒙生态下大模型重塑移动应用开发新范式
  • 基于 IPIDEA API 的 eBay 商品数据 Python 采集实战
  • Python 实战:同花顺股票数据爬取与指标提取
  • Flutter for OpenHarmony:使用 money2 实现高精度金融计算

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online