当前位置: 首页 > 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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数据结构与算法图论 并查集
  • 【c++】类和对象详解
  • 智能优化算法-鼠群优化算法(RSO)(附源码)
  • Vue 获取参数
  • (20)docke容器
  • JDK22一些新特性
  • 空间数据库概述
  • JS获取URL参数的几种方法
  • swift:qwen2 VL 多模态图文模型lora微调swift
  • 在ros中进行无人机和无人车之间的通信(代码)
  • iframe详解和用途解读
  • WiFi性能测试是评估无线网络性能的重要环节,它涵盖了多个方面的指标,如信号强度、网络速度、延迟时间等。
  • C语言从头学55——学习头文件errno.h、float.h
  • 构建Vue项目的侧边栏组件:Aside
  • 【Windows系统工具】dll综合解决工具,解锁专业版功能!
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • echarts的各种常用效果展示
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • ES6语法详解(一)
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • KMP算法及优化
  • Laravel5.4 Queues队列学习
  • Lsb图片隐写
  • opencv python Meanshift 和 Camshift
  • Python socket服务器端、客户端传送信息
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Vue ES6 Jade Scss Webpack Gulp
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 免费小说阅读小程序
  • 前端路由实现-history
  • 全栈开发——Linux
  • 学习Vue.js的五个小例子
  • 因为阿里,他们成了“杭漂”
  • 硬币翻转问题,区间操作
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • "无招胜有招"nbsp;史上最全的互…
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • ### RabbitMQ五种工作模式:
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (14)Hive调优——合并小文件
  • (2)MFC+openGL单文档框架glFrame
  • (39)STM32——FLASH闪存
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (4)事件处理——(7)简单事件(Simple events)
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (含笔试题)深度解析数据在内存中的存储
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (五)c52学习之旅-静态数码管
  • (原)本想说脏话,奈何已放下
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案