C++中的容器

一、序列容器(Sequence Containers)​​

存储元素的线性序列,支持按顺序访问。

  1. ​​vector​​

    • ​特点​:动态数组,支持快速随机访问(O(1)),尾部插入/删除高效(O(1)),中间插入/删除效率低(O(n))。
    • ​应用场景​ :
      • 需要动态调整大小(如读取未知数量的数据)。
      • 频繁随机访问元素(如数组式操作)。
      • 示例:存储实时传感器数据、实现动态列表。
  2. ​​list​​

    • ​特点​:双向链表,任意位置插入/删除高效(O(1)),不支持随机访问(需遍历,O(n))。
    • ​应用场景​ :
      • 频繁在中间插入/删除元素(如实现LRU缓存)。
      • 需要合并、拆分链表的高效操作。
      • 示例:任务调度队列、需要频繁修改的中间数据。
  3. ​​deque​​(双端队列)

    • ​特点​ :类似vector,但支持高效的头尾插入/删除(O(1)),内存分段存储。
    • ​应用场景​ :
      • 需要两端操作(如队列或滑动窗口)。
      • 示例:实现消息队列、实时数据缓冲区。
  4. ​​array​​(C++11)

    • ​特点​:固定大小的数组,比内置数组更安全(支持迭代器和STL算法)。
    • ​应用场景​ :
      • 已知固定大小的数据存储(如存储配置参数)。
      • 需要高性能且无需动态扩容的场景。
  5. ​​forward_list​​(C++11)

    • ​特点​ :单向链表,仅支持前向遍历,比list更省内存,但功能更少。
    • ​应用场景​ :
      • 内存敏感的场景(如嵌入式系统)。
      • 只需单向遍历且频繁插入/删除(如哈希表的链式存储)。

二、关联容器(Associative Containers)​​

基于键(Key)有序存储,支持快速查找(通常用红黑树实现)。

  1. ​​set​​

    • ​特点​:唯一键的有序集合,自动排序,查找复杂度为 O(log n)。
    • ​应用场景​ :
      • 需要去重且有序的数据(如存储用户ID)。
      • 示例:黑名单过滤、有序事件集合。
  2. ​​multiset​​

    • ​特点​ :允许重复键的有序集合,其他与set相同。
    • ​应用场景​:需要有序但允许重复键的场景(如统计得分排名)。
  3. ​​map​​

    • ​特点​:键值对的有序集合,键唯一,自动排序。
    • ​应用场景​ :
      • 字典式数据(如配置文件键值对)。
      • 示例:存储学生ID到姓名的映射。
  4. ​​multimap​​

    • ​特点​:允许重复键的有序键值对集合。
    • ​应用场景​ :
      • 一键多值的映射(如日志按时间戳分类)。

​​三、无序关联容器(Unordered Associative Containers)​​

基于哈希表实现,键无序但查找更快(平均 O(1))。

  1. ​​unordered_set​​

    • ​特点​:唯一键的无序集合,依赖哈希函数。
    • ​应用场景​ :
      • 快速去重且无需顺序(如缓存快速查找)。
      • 示例:URL去重、实时数据过滤。
  2. ​​unordered_multiset​​

    • ​特点​:允许重复键的无序集合。
    • ​应用场景​:统计高频数据(如词频统计)。
  3. ​​unordered_map​​

    • ​特点​:键值对的无序集合,键唯一。
    • ​应用场景​ :
      • 快速键值查找(如数据库索引)。
      • 示例:用户会话存储、缓存系统。
  4. ​​unordered_multimap​​

    • ​特点​:允许重复键的无序键值对集合。
    • ​应用场景​:一键多值的快速存储(如IP地址到多个端口的映射)。

​​四、容器适配器(Container Adapters)​​

基于其他容器实现的特定数据结构接口。

  1. ​​stack(栈)​​

    • ​底层容器​ :默认deque,也可用vector或list。
    • ​特点​:后进先出(LIFO)。
    • ​应用场景​:函数调用栈、撤销操作(Undo)。
  2. ​​queue(队列)​​

    • ​底层容器​ :默认deque,也可用list。
    • ​特点​:先进先出(FIFO)。
    • ​应用场景​:任务队列、消息传递。
  3. ​​priority_queue(堆)​​

    • ​底层容器​ :默认vector,基于堆实现。
    • ​特点​:元素按优先级出队(最高优先级先出)。
    • ​应用场景​:任务调度(如操作系统进程调度)、实时数据处理。

​​五、其他容器​​

  1. ​​string​​

    • ​特点​ :专为字符串设计的容器,支持类似vector的操作。
    • ​应用场景​:文本处理、字符串拼接/解析。
  2. ​​bitset​​

    • ​特点​:固定大小的位序列,支持位操作。
    • ​应用场景​:标志位存储、位掩码操作(如权限管理)。
相关推荐
UIU1143 分钟前
P1003 [NOIP 2011 提高组] 铺地毯
数据结构·c++·算法
唐钰小宝B18 分钟前
深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别
java·开发语言·windows
知识分享小能手1 小时前
C学习教程,从入门到精通,C语言指针 —— 详细知识点总结(10)
c语言·开发语言·学习
熊猫钓鱼>_>1 小时前
开源鸿蒙平台 KMP 三方库 kotlin-csv 适配全流程:从编码假设到沙箱真机互通验证
开发语言·人工智能·华为·kotlin·harmonyos·鸿蒙
张张123y1 小时前
# 后端第七课:FastAPI 实战入门(用刚学的 Python 写第一个 API 接口)
开发语言·python·mysql·api·fastapi
xxwl5851 小时前
区域赛算法模版第四章---数据结构
数据结构·c++·算法
小陈不好吃1 小时前
Java 泛型与类型擦除:从 PECS 原则到 TypeToken 绕过
java·开发语言·windows·pecs 原则·typetoken绕过
Shaoshing2 小时前
存储引擎与架构
java·开发语言·架构
额额额对了2 小时前
Linux 驱动开发:基于 platform 总线 + misc 设备的 DS18B20 单总线温度驱动
linux·c语言·开发语言·驱动开发·嵌入式硬件
devilnumber2 小时前
Java 代理模式(简单理解回顾)
java·开发语言·代理模式