C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。
C++ 标准模板库的核心包括以下三个组件:
组件 | 描述 |
---|---|
容器(Containers) | 容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。 |
算法(Algorithms) | 算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。 |
迭代器(iterators) | 迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。 |
这三个组件都带有丰富的预定义函数,帮助我们通过简单的方式处理复杂的任务。
容器(Containers)
总的来说容器可分为两类:
序列式容器 Sequence containers ,是可序群集,其中每个元素均有固定的位置——取决于插入的时间和地点,和元素值无关
如果你以追加的方式对一个集群置入6个元素,他们的排序顺序和置入顺序相同。SLT 提供的序列容器:vector,deque,list
关联式容器 Associative containers ,是已序群集,元素位置取决于特定的排序准则.如果置入六个元素,他们的位置取决于元素
值和置入顺序无关.STL 提供的关联式容器:set,multiset,map,multimp
STL容器对比容器的特性跟背后内存的分布息息相关,从上图可以很清晰的看出。
1,array、vector、deque的内存是连续的,连续的内存空间必定是支持随机访问的,其余容器则不具备该特点。其中array为固定长度,vector、deque为变长,vector只能单向扩充,deque可以双向扩充。
2,list、forward-list为链条式结构,这种结构在插入、删除时只需要局部调整非常方便。但是遍历时只能按照链条顺序依次遍历,查找起来并不迅速。
3,set、map背后的实现为红黑树,所以对查找具有先天的优势,但这种结构插入删除时会产生联动效应,所以并不适合做频发的删除、插入。其中各自multi版本表示内容可以重复。
————————————————
版权声明:本文为CSDN博主「Polaroid2007」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:容器分类及其对比https://blog.csdn.net/LanerGaming/article/details/80768543
————————————————
版权声明:本文为CSDN博主「Polaroid2007」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:容器分类及其对比https://blog.csdn.net/LanerGaming/article/details/80768543
迭代器(iterators)
有了集合,那么怎么去遍历呢?迭代器就是为遍历提供了各种方法:向前遍历,向后遍历,从中间遍历等等,根据自己的需求去选择相应的方法。