STL--容器

news/2025/2/21 5:36:56/

vector(向量)

优点:支持随机访问,所以查询效率高;尾部插入和删除操作效率高。
缺点:向非尾部插入或删除元素时,由于可能需要移动内存中的元素,效率较低;空间大小动态增长时,可能会涉及内存重新分配和拷贝,造成性能开销。
应用场景:适用于对象简单,变化较小,且频繁需要随机访问的场景。

list(列表)

优点:任意位置插入和删除节点效率高,因为只需要更改相邻节点的指针;内存使用灵活,不需要连续内存空间。
缺点:不支持随机访问,只能通过迭代器顺序访问元素,查询效率较低。
应用场景:适用于对象变化大,且对象数量变化频繁,需要频繁进行插入和删除操作的场景。

deque(双端队列)

优点:在两端插入和删除元素效率高;内部由多个固定大小的块组成,可以高效管理内存。
缺点:相比于vector,其随机访问可能稍慢,且可能占用更多的内存(由于存在多个块)。
应用场景:需要频繁在队列两端进行插入和删除操作的场景。

set(集合)和multiset(多重集合)

优点:自动对元素进行排序;查找、插入和删除操作效率高,因为它们基于红黑树实现。
缺点:不支持随机访问;由于需要维护排序状态,插入和删除操作可能相对于vector或list较慢。
应用场景:需要自动排序且不包含重复元素的场景。

map(映射)和multimap(多重映射)

优点:存储键值对,并自动按键排序;查找、插入和删除操作效率高。
缺点:不支持随机访问;同样由于需要维护排序状态,操作可能相对较慢。
应用场景:需要存储键值对,并根据键进行排序和查找的场景。
stack(栈)和queue(队列)
优点:提供了标准的栈和队列数据结构,符合先进后出(LIFO)和先进先出(FIFO)的操作特性。
缺点:功能相对单一,仅提供基本的栈和队列操作。
应用场景:实现需要遵循LIFO或FIFO操作原则的场景,如函数调用栈、任务队列等。

bitset

优点:适用于处理固定大小的位集合,可以高效地进行位操作。
缺点:大小固定,不适合处理可变大小的位集合。
应用场景:处理与位操作相关的场景,如权限管理、标志位设置等。

unordered_map、unordered_multimap、unordered_set和unordered_multiset

优点:基于哈希表实现,提供了常数时间的插入、删除和查找操作(平均情况下)。
缺点:元素不保证有序;在最坏情况下,操作的时间复杂度可能退化。
应用场景:需要快速查找且不要求元素有序的场景。

在选择容器时,应根据具体的应用场景和需求来权衡各种容器的优缺点:

  • 如果需要频繁随机访问元素,vector可能是更好的选择;
  • 如果需要在任意位置插入和删除元素,list可能更合适;
  • 对于需要自动排序的场景,可以选择set或map;
  • 对于需要快速查找且不要求有序的场景,可以考虑使用基于哈希表的容器;

http://www.ppmy.cn/news/1414074.html

相关文章

6-104 图的邻接表的实现python版

在图的邻接表存储结构下(基于顶点列表和单链表实现),本题要求图类里实现2个方法函数 def addVertex(self, vex_val): def addEdge(self, f, t, cost=0): 函数接口定义: 在这里描述函数接口。例如: def addVertex(self, vex_val):def addEdge(self, f, t, cost=0): 在…

Mysql底层原理六:InnoDB 数据页结构

1.行格式 1.1 Compact行格式 1.1.1 示意图 1.1.2 准备一下 1)建表 mysql> CREATE TABLE record_format_demo (-> c1 VARCHAR(10),-> c2 VARCHAR(10) NOT NULL,-> c3 CHAR(10),-> c4 VARCHAR(10)-> ) CHARSETascii ROW_FORMATCOM…

PyCharm Pro 2024:卓越的Python编辑开发工具,适用于Mac与Windows平台

PyCharm Pro 2024是一款专为Python开发者设计的强大编辑开发工具,无论是Mac还是Windows用户,都能从中受益良多。该软件凭借其出色的性能、丰富的功能和卓越的用户体验,成为Python编程界的翘楚。 作为一款高效的Python编辑器,PyCh…

usb_camera传输视频流编码的问题记录!

前言: 大家好,今天给大家分享的内容是,一个vip课程付费的朋友,在学习过程中遇到了一个usb采集的视频数据流,经过ffmpeg编码,出现了问题: 问题分析: 其实这个问题不难,关键…

idea中输入法被锁定如何清除

今天遇到一个问题?idea中输入法被锁定了,无论怎么切换输入法,切换中英文,在idea中输出的均为英文内容,该如何解决呢?(idea官网:JetBrains: 软件开发者和团队的必备工具) …

SpringBoot中的yaml 与properties文件书写格式

本文参考https://c.biancheng.net/spring_boot/example.html SpringBoot starter Spring Boot 将日常企业应用研发中的各种场景都抽取出来,做成一个个的 starter(启动器),starter 中整合了该场景下各种可能用到的依赖&#xff…

Objective-C学习笔记(NString,匿名对象,self,继承,super,description)4.8

1.NSString:是一个类,存储OC字符串。 2.stringWithUTF8String:类方法,将C语言字符串转为OC字符串。 3.stringWithFormat:类方法,拼接字符串。 4.length:求字符串长度。 5.characterAtIndex(n)&#xff…

缓存、分布式缓存、缓存的风险

为系统引入缓存的理由 在软件的开发中,引入缓存的负面作用明显大于硬件的缓存。主要由以下几个方面 从开发者角度来说引入缓存会提高系统的复杂度,因为你需要考虑缓存的失效、更新、一致性等问题(硬件缓存也存在这些问题,只是不需…