C++ stack和queue的使用介绍和模拟实现

内容摘要:

本文介绍了stack和queue的构造函数和一些成员函数,并模拟实现了stack和queue,分析了为什么选择deque作为适配器默认封装的对象

stack的介绍

栈是只能够在一端进行插入和删除的,这就是我们一直常说的“后进先出”,也就是后插入的先进行删除

stack和我们前面学习的string、vector、list是有本质区别的,stack是属于容器适配器,并不是容器,容器是可以直接进行数据的存储功能的,而容器适配器不是直接进行数据存储的容器,而是通过现有的容器进行包装。

 

通过指定第二个模板参数,可以用除双端队列(deque)之外的一些基础容器来指定模板参数,因为容器适配器是使用现有容器进行包装实现的,基于栈(stack)本身的结构,所以说要想称为第二个模板参数,容器本身需要支持empty()、size()、back()、push_back()、pop_back()这五种成员函数。

关于双端队列可以看上篇文章C++ deque的深入理解C++ deque的深入理解

选择deque作为stack适配器包装对象的缺省参数的原因

stack需要本身支持,push_back、pop_back和扩容操作,这些操作deque、list、vector都可以满足,当随着stack进行插入数据,deque的扩容效率比vector高,与list相比尾插尾删的效率高,并且CPU缓存速率高,详细解释看上一篇文章。

构造函数

默认构造出一个空栈

一些其他的成员函数(栈的基本操作)

  • empty: 判断栈是否为空,如果栈为空则返回1,否则返回0
  • size: 返回栈中的元素个数
  • top: 获取栈顶元素
  • push: 将元素进行入栈操作
  • pop: 将元素进行出栈操作

stack的模拟实现


queue 的介绍

queue 是一种数据固定在一端进行插入一端进行删除的数据结构,在进行插入的一端称为队尾,进行出队列的一端称为对头,数据符合“先进先出”,所谓的先进先出就是先进行插入的数据也会先进行出队列

queue第二个模板参数的适配器也选择了deque作为默认封装的容器,原因是queue需要的操作是push_back和pop_front,deque的尾插和头删的效率都是非常高的,而且与list进行相比deque在内存中的空间存储连续性好,CPU缓存效率高。

构造函数

默认构造出一个空栈

一些其他成员函数(队列的基本操作)

  • empty(): 判断栈是否为空
  • size():返回队列中有效元素的个数
  • push_back():将元素进行入队操作
  • pop_front():将元素进行出队操作
  • back():取栈尾元素
  • front():取栈头元素

这些成员函数就决定了queue的适配器封装不了vector,因为vector不支持头删,通过erase可以进行头删,但是效率太差了。

queue的模拟实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值