当前位置: 首页 > java >正文

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,也可用vectorlist
    • ​特点​​:后进先出(LIFO)。
    • ​应用场景​​:函数调用栈、撤销操作(Undo)。
  2. queue(队列)

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

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

​五、其他容器​

  1. string

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

    • ​特点​​:固定大小的位序列,支持位操作。
    • ​应用场景​​:标志位存储、位掩码操作(如权限管理)。
http://www.xdnf.cn/news/7142.html

相关文章:

  • 进程和线程的区别和联系
  • FreeRTOS的学习记录(中断管理)
  • 5.18打卡
  • 延时双删-争议与我的思路-001
  • 动态通讯录程序
  • P1009 [NOIP 1998 普及组] 阶乘之和
  • 深入理解 LangChain 文档处理机制:Document 类与文档加载器详解
  • uni-app学习笔记七-vue3事件处理
  • 优化 Spring Boot 应用启动性能的实践指南
  • 单片机超频怎么搞?
  • 实时时钟项目设计
  • 腾讯云证书过期提醒的应对措施,Caddy 自动管理的 Let‘s Encrypt 证书.
  • 使用国内源加速Qt在线安装
  • Docker拉取镜像报错Error response from daemon: Get “https://registry-1.docker.io/v2/“
  • 测试--测试分类 (白盒 黑盒 单元 集成)
  • vscode中Debug c++
  • Android开发-列表类视图
  • 亚马逊新品3周冲刺BSR前10:数据驱动的冷启动破局指南
  • 模型评估与调优(PyTorch)
  • 四品种交易策略
  • MetaMask安装及使用-使用水龙头获取测试币的坑?
  • C++ThreadPool
  • 回溯实战篇3
  • 新电脑软件配置二:安装python,git, pycharm
  • 2025年PMP 学习二十 第13章 项目相关方管理
  • docker-compose部署项目(springboot服务)以及基础环境(mysql、redis等)ruoyi-ry
  • 【数字电路】第七章 脉冲波形的产生与整形电路
  • 【推荐】新准则下对照会计报表172个会计科目解释
  • Gartner《如何将生成式人工智能(GenAI)集成到应用架构》学习心得
  • 【Docker 新手入门指南】第六章:容器操作