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

【C++】容器

在 C++ 中,容器是用来存储和管理一组对象的类模板。标准模板库(STL)提供了多种容器,每种容器都有其特定的用途和特性。容器主要可以分为以下几类:

1. 序列容器(Sequence Containers)

这些容器维护了元素的线性顺序。常见的序列容器包括:

  • std::vector: 动态数组,可以高效地在末尾添加和删除元素,随机访问元素的时间复杂度为常数时间 O(1)
  • std::deque: 双端队列,可以在前后两端高效地添加和删除元素,但随机访问的时间复杂度稍高于 std::vector
  • std::list: 双向链表,支持在任意位置进行高效插入和删除操作,但随机访问的时间复杂度为线性时间 O(n)
  • std::forward_list: 单向链表,支持高效的插入和删除操作,但只支持单向遍历。

2. 关联容器(Associative Containers)

这些容器基于某种排序规则(通常是二叉搜索树),提供高效的元素查找和插入。常见的关联容器包括:

  • std::set: 存储唯一元素,自动排序。
  • std::multiset: 存储多个相同元素,自动排序。
  • std::map: 存储键值对,键唯一,自动排序。
  • std::multimap: 存储多个相同键的键值对,自动排序。

3. 无序关联容器(Unordered Associative Containers)

这些容器基于哈希表实现,提供平均常数时间复杂度 O(1) 的元素查找、插入和删除操作。常见的无序关联容器包括:

  • std::unordered_set: 存储唯一元素,不保证元素顺序。
  • std::unordered_multiset: 存储多个相同元素,不保证元素顺序。
  • std::unordered_map: 存储键值对,键唯一,不保证元素顺序。
  • std::unordered_multimap: 存储多个相同键的键值对,不保证元素顺序。

4. 容器适配器(Container Adapters)

容器适配器提供了对底层容器的特定操作接口。常见的容器适配器包括:

  • std::stack: 基于另一个容器(如 std::deque 或 std::list)实现的栈(后进先出,LIFO)数据结构。
  • std::queue: 基于另一个容器实现的队列(先进先出,FIFO)数据结构。
  • std::priority_queue: 基于一个容器实现的优先队列,提供对元素优先级的管理。

结构关系图: 

容器(Container)

顺序容器(Sequence)

关联容器(Associative  Container)

可逆容器(Reversible Container)

List

Set Multiset

Map Multimap

随机访问容器(Random Container)

Vector

Deque

 关于每个容器的用法将在后续介绍。

(1)std::vector:

http://t.csdnimg.cn/1YUbd

(2)std::deque: 

http://t.csdnimg.cn/aHy8A

(3)std::list:  

http://t.csdnimg.cn/ededJ 

(4)std::forward_list: 

http://t.csdnimg.cn/1FmpH


http://www.mrgr.cn/news/21964.html

相关文章:

  • 基于51单片机的倒计时定时器proteus仿真
  • 手机玩机常识-------诺基亚系列机型3/5/6/7/8详细的刷机教程步骤 手机参考救砖刷机教程
  • 用EA和SysML一步步建模(05)使命声明-解构需求01
  • C++实现俄罗斯方块(Windows控制台版)
  • 21. 合并两个有序链表【 力扣(LeetCode) 】
  • 项目实战系列三: 家居购项目 第四部分
  • LabVIEW程序员是怎样成长为大佬
  • 跨系统环境下LabVIEW程序稳定运行
  • 农场管理系统小程序的设计
  • 包机制,javadoc生成文档,用户交互scanner
  • 发现 Unstructured 的 “TensorrtExecutionProvider“ 比 “CUDAExecutionProvider“ 慢
  • flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志
  • 【2.1 深度学习中的感知机是什么】
  • AI模型:到底是追求全能还是要追求专精?这是一个问题
  • Exchange 服务器地址列表的配置方法与注意事项
  • 唯徳知识产权产权系统存在任意文件读取漏洞
  • FastGPT自定义插件的icon
  • 机器学习1——手把手教你用Python跑一个线性回归模型
  • Class对象和静态方法
  • 【高等代数笔记】线性空间(一到四)