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

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

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

锁机制发布于 2026/2/19更新于 2026/9/1051 浏览
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. 参考总结

更多推荐文章

查看全部
  • AI 辅助游戏开发:基于 DeepSeek 构建贪吃蛇游戏
  • 多模态模型开发实战:文本、图像与语音融合应用
  • 使用 Java 将 PDF 转换为 Excel:基础转换与高级设置
  • Mac 抹除重装卡在激活锁的两种解锁方案
  • RAG 在大模型中的角色:高效文档切分与长上下文探讨
  • 循环神经网络(RNN)与序列数据处理实战
  • 算法优选技巧:位运算实战解析
  • 人工智能与大模型核心技术体系及学习路径指南
  • Flutter 投票系统:数据统计与排序算法深度解析
  • Ubuntu20.04 + ROS Noetic + Gazebo 实现 UR5 机械臂视觉抓取乐高积木仿真
  • AI 语言大模型商业价值深度解析
  • 2026 年 AI 学习路线:从入门到精通
  • Claude Code 命令行工具安装配置与使用指南
  • Python 自学经典书籍推荐与系统学习路线指南
  • CVE-2025-64446:FortiWeb 路径遍历配合身份绕过,9.8分漏洞正被大规模利用
  • Flutter anthropic_sdk_dart 鸿蒙化适配指南
  • OpenClaw Linux 环境安装、初始化与 Web UI 配置指南
  • React Native for HarmonyOS react-native-webview 集成指南
  • 十分钟实战:使用 Resend 构建邮件营销系统
  • OpenClaw:AI Agent 框架的安全挑战与未来发展

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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