当前位置: 首页 > article >正文

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的模拟实现


http://www.kler.cn/news/334514.html

相关文章:

  • 【网络通信基础与实践番外三】TCP的三次握手和四次挥手和例题
  • Java.数据结构.HashSet
  • 【go入门】运算符
  • 【Java并发编程的艺术3】Java内存模型(上)
  • Redis: 集群高可用之MOVED转向和ASK转向解决方案
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-01
  • LeetCode讲解篇之98. 验证二叉搜索树
  • PCIe6.0 AIC金手指和板端CEM连接器信号完整性设计规范
  • Nexus制品库搭建(maven)
  • 汇编语言笔记2
  • java数据类型转换和注释
  • esp8266 at指令链接wifi时一直connect disconnest
  • 信号用wire类型还是reg类型定义
  • 2024年,现在做全职的AI产品经理,时机对不对?
  • VMware ESXi更改https的TLS协议版本
  • 植物叶片病害检测数据集 5100张 29类 带标注 voc yolo
  • 利用 Python 爬虫采集 1688商品详情
  • 【D3.js in Action 3 精译_028】3.4 小节 DIY 实战:使用 Observable 在线绘制 D3 条形图
  • 问:TCP长连接vs短连接有哪些差异?
  • Unity MVC框架演示 1-1 理论分析