【C++】容器适配器-----stack、queue、priority_queue

概念

  我们可以简单的将容器适配器当做一个接口装置。有的电脑上没有数据转接口,但是有usb接口,这是我们没必要重新买一个电脑,我们可以做一个usb数据转接线。而这根数据转接线就类似于适配器一样。
  在C++中,我们已经有了(vector、list、deque等容器)插入、删除、迭代器就电脑usb接口,当我们想要实现栈的操作时,我么没有必要再重新写新的数据结构,只需要将其接口进行重新的封装,相当于做了一根数据转接线。我们就可以将这个容器当做数据结构使用。

分类

  C++中定义了3种容器适配器,它们让容器提供的接口变成了我们常用的的3种数据结构,stack(栈)、queue(队列)、priority_queue(优先级对列)

  • 栈:先进后出,我们可以想一下,在STL中,其底层应该一些序列式中容器,能够进行提供push_back(向栈顶插入元素) 、pop_back(删除栈顶元素)序列式容器都可以满足封装成栈的要求。
  • 队列:先进先出。对pop_front(头删)、push_back(尾插)操作的序列式容器的封装,底层不可能是vector。
  • 优先级队列:支持随机访问的功能,所以其底层结构只能为vector或duque。

接口

stack(栈)接口
在这里插入图片描述
qeque(队列)接口
在这里插入图片描述
priority_queue(优先级对列)
在这里插入图片描述

底层结构

stack:deque
queue:deque
priority_queue:vector,默认大顶堆
为什么stack与queue底层为deque,priority_queue底层为vector?

deque于vector的区别:
在这里插入图片描述
列举了几个重要的信息:我们现在了解到为啥stack、queue、priority_queue底层实现不同。

  • stack、queue不需要进行元素遍历,但是元素入栈、入队容易发生扩容操作,所以使用deque。在stack中元素增长时,deque比vector的效率高;queue中的元素增长时,deque不仅效率高,而且内存使用率高。
  • priority_queue需要对元素进行遍历,vector迭代器的速度相对于duque来说比较快。

stack模拟实现

template<class T,class S = deque<T>>
class Stack
{
   
public:
	Stack() 
	{
   
	}
	void push(const T& x)
	{
   
		_s.push_back(x);
	}
	void pop()
	{
   
		_s.pop_front();
	}
	T& top() //这块需要注意,由于栈是先进后出,这块于deque的刚好相反
	{
   
		return _s.back();
	}
	size_t size()
	{
   
		return _s.size(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值