STL--容器

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;
  • 对于需要快速查找且不要求有序的场景,可以考虑使用基于哈希表的容器;
相关推荐
wuminyu13 分钟前
JDK21中FFM api的upcall回调机制解析
java·linux·c语言·jvm·c++
我变成萤火虫7 小时前
河南萌新联赛2026第(四)场:南阳理工学院
数据结构·c++·算法·贪心算法·stl·动态规划
余额瞒着我当琳11 小时前
C++--深拷贝三件套 + swap + 写时拷贝 + vector 扩容 + reserve
java·开发语言·c++
ShineWinsu12 小时前
对于C++:布隆过滤器(bloomfilter)的详细解析
c++·面试·位图·位运算·布隆过滤器·海量数据·比特位
牛油果子哥q16 小时前
C++内存模型与深浅拷贝万字详解:栈堆静态内存布局、深浅拷贝底层差异、内存泄漏根治、拷贝崩溃踩坑、手写深拷贝实战
java·开发语言·c++
大鹏的NLP博客16 小时前
通用 Linux 嵌入式板端 C/C++ ABI 与 Glibc 依赖治理规范
linux·c++·交叉编译
ysa05103016 小时前
c++常用自带函数用法与注意
c++·笔记·算法
qq_1508419918 小时前
从CVI(C)到Pyside(python)/Qt(C++)/VS(C#)的一点吐槽
c++·qt·c#
鸿芯微控科技21 小时前
MFC模拟量信号异常怎么排查?0-5V、4-20mA接线与量程换算
c++·5g·mfc·故障排查·质量流量控制器·4-20ma·模拟量信号
三十岁老牛再出发21 小时前
08.18每日总结
c++·python·numpy·pandas