C++ STL

C++ 标准模板库(Standard Template Library)是C++模板类和函数的集合。

有点像更加具体的“数据结构”

核心包括以下三个组件:

容器(Containers):容器是用来管理某一类对象的集合。

标准容器:

vector:动态连续空间,除了可以在尾部进行扩展,还能进行插入删除。对于迭代器来说,相当于指针,是随机访问迭代器。vector中也包含了一些方法,其中插入/删除方法比较低效,原因在于vector使用连续空间。只有在末尾比较高效。

deque(双向队列):是由一系列固定大小的连续缓冲区(或称为“块”)组成的,这些缓冲区通过指针连接在一起。是一种双向开口的连续线性空间,在两端插入删除效率较高,在中间插入也很低效,也提供了随机访问迭代器,但效率不高。

中控器:用于记录每个缓冲区的位置和大小,以及当前deque的起始和结束位置。

deque内部存储结构

list(双向链表):是一种物理存储单元上非连续非顺序的储存结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。list对于任何位置插入或删除元素都是常数项时间,提供双向迭代器。

set/multiset(集合):所有的容器都会根据元素自身的键值进行自动被排序,set的元素既是实值又是键值。set和multiset的底层实现是红黑树。set的迭代器是双向迭代器,由于set中的元素是自动排序的,因此迭代器遍历的顺序就是元素的排序顺序。set中的迭代器无法改变set的值,但可以增删查,multiset特性及用法和set完全相同,唯一的差别在于它允许键值重复。

unordered_set/unordered_multiset(无序集合):提供了一种基于哈希表的容器,用于存储唯一的元素集合。与 set 不同,unordered_set 不保证元素的排序,但通常提供更快的查找、插入和删除操作。提供单向迭代器,因为unordered_set内部的顺序没有意义。

map / multimap(映射):map和multimap也是以红黑树作为底层实现机制。map中的数据以pair类型存储,pair的第一元素被视为键值,第二元素被视为实值。所有的元素都会根据元素的键值自动排序,对于map中的迭代器也是双向迭代器,和set中类似,但是可以更改键值对应的实值。map不允许有相同的键值,但multimap可以。

unordered_map/unordered_multimap(无序映射):提供了一种基于哈希表的键值对容器。unordered_map 不保证元素的排序,但通常提供更快的查找速度。也提供单向迭代器。

容器适配器:

它并不是直接存储数据的容器,而是对已有容器的一种封装或适配,使其呈现出另一种容器的行为特性。

stack(栈):先进后出,允许新增元素、移除元素、取得栈顶元素,但是除了最顶端外,没有任何其他方法可以存取stack的其他元素。不存在迭代器。但具有返回栈大小的方法。

queue(队列):先进先出,同样不允许遍历,不支持随机查找,也不存在迭代器,但具有判空和返回队列大小的方法。

priority_queue(优先队列):它允许我们快速访问队列中具有最高(或最低)优先级的元素。它不提供迭代器,也不支持随机访问。priority_queue 默认是一个最大堆(这里指堆的行为,其内部存储结构并不是堆),它依赖于底层容器(如 vector 或 deque)来存储元素,并通过这些元素的索引来模拟堆的父子关系。

其他常见:array也是一个类模板,内存连续,大小固定,支持索引访问但属于标准库,不属于STL

string属于STL,用来存储字符串,提供了许多字符串处理方法。

算法(Algorithms):算法作用于容器。

具体的算法就到实践中去探索吧!

迭代器(iterators):

迭代器可被视为一种智能指针,包括输入迭代器(Input Iterator)、输出迭代器(Output Iterator)、前向迭代器(Forward Iterator)、双向迭代器(Bidirectional Iterator)和随机访问迭代器(Random Access Iterator)。

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值