C++stack,queue底层实现以及deque的详细介绍


前言

在本篇文章中,我们将会学到stack,queue的底层实现,我们通过本篇的学习,我们会发现,栈和队列的实现和vector,list等容器的实现会有很大差异。我们实现栈和队列是通过一种叫容器适配器的东西实现的。我们还将会学到deque,这是一种将list和vector结合的一种容器。我们来详细看一看吧!!!🌟🌟🌟

一、容器适配器

在介绍容器适配器之前,我们来想一下stack应该如何实现呢??

我们很清楚,栈是一种后进先出的结构,只能在一端进行数据的插入删除。
在c语言我们学习过,stack既可以用顺序表来实现,又可以用链表实现。
那么我们在C++中依然可以采用相同的方式来实现链式栈和顺序栈。

但是,我们发现在实现stack的接口中,很多都与顺序表的实现结构相似。
那麽我们把vector的一些接口进行封装,修改修改不就是我们stack的结构吗??

在C++官方库中,确实就是采用这种方法进行实现的。我们把这个叫做容器适配器

stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出

队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。

容器适配器是C++标准库中的一种数据结构,它可以将不同类型的容器(如vector、list、deque等)转换为另一种类型的容器。本质上,容器适配器是一种机制,能使某种容器的行为看起来像另外一种容器。这种转换提供了一种简单的方式来重新组织和访问数据,同时隐藏了底层容器的实现细节。容器适配器通常用于解决特定的问题或满足特定的需求。

二、stack的实现

我们现在已经知道实现stack采用容器适配器来实现,我们想实现一个链式栈,就采用list进行适配,我们想实现一个顺序栈,就采用vector进行适配。

vector适配缺点:容易造成空间浪费
list适配缺点:内存命中率较低

有没有一种两者兼有的结构呢??
我们来看一下stack库里的是如何实现的!!!
在这里插入图片描述
我们发现在进行适配时,默认采用了deque这个容器。

这其实是一个双端队列。尾插尾删效率很高,对于空间的浪费也没有那麽大,内存命中率也可以。我们先用这个实现一下,在后面我们再来详细看一下

template<class T,class con=deque<T>>
class stack
{
   
   
public:
	void push(const T&val)
	{
   
   
		_con
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lim 鹏哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值