栈、队列以及优先级队列的容器配置相关问题

本文深入探讨了适配器的设计理念,解释了为何队列(queue)和栈(stack)选择双端队列(deque)而非向量(vector)作为底层容器,以及优先级队列(priority_queue)依赖于向量的原因。通过对比不同容器的特点,如内存使用效率、扩容策略及操作时间复杂度,揭示了适配器模式在提高数据结构性能方面的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

怎么理解这个适配器?
1、适配器底层没有自己的数据结构,它是另外一个容器的封装,它的方法,全部由底层依赖的容器进行实现。
2、没有实现自身的迭代器。

为什么queue和s’tack底层不依赖vector而以来deque呢?
1、vector的初始内存效率太低了,每次都是二倍扩容,deque的第二维默认是4096/sizeof(int)=1024个数组空间,不需要多次扩容。
2、对于queue来说,需要支持尾部插入,头部删除,deque这两项操作的时间复杂度都是O(1),如果依赖vector,其底层出队效率很低。
3、vector需要大片连续的内存,而deque只需要分段的内存,在存储大量数据时,deque对内存的利用率最好。

priority_queuq底层为什么以来vector呢?
底层默认把数据组成一个大根堆结构,需要在一个内存连续的数组上构建一个大根堆或者小根堆,父子节点之间的关系是通过下标来确定的,而deque的第二维上不同数组的下标会重新计算,只有在同一个数组中计算下标才有意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值