C++——栈和队列容器

前言:这篇文章我们将栈和队列两个容器放在一起进行分享,因为这两个要分享的知识较少,而且两者在结构上有很多相似之处,比如栈只能在栈顶操作,队列只能在队头和队尾操作。

不同于前边所分享的三种容器,这篇文章要介绍的两个容器,不再是单纯的空间创建存储,而是以vector、list等容器为底层来实现的容器。 


目录

一.栈

1.栈的框架

 2.功能实现

二.队列

1.队列框架

2.功能实现

三.扩展

总结


一.栈

栈的关键在于只能从栈顶进行入栈和出栈,那么我们就可以将vector或者list的头作为栈底,在尾进行操作


1.栈的框架

在数据结构的学习中我们已经知道,栈有顺序栈和链式栈两种,所以容器栈就可以按照需求,通过模板来选择是创建顺序栈还是链式栈

#include<vector>
#include<list>namespace Mystack
{//stack<int vector<int>> 顺序栈//stack<int list<int>> 链式栈template<class T, class Container = vector<T>>class stack{public:private:Container _con;};
}

想要这样创建栈,就必须包含vector和list两个容器的头文件。 

通过使用两个模板参数,一个代表数据类型,一个代表栈的类型Container即英文"容器"

因为通常情况下所使用的栈都是顺序栈,所以我们为了方便栈的创建,可以将模板也写成缺省模板。缺省模板和缺省函数类似。 


 2.功能实现

我们直接来看:

		//入栈void push(const T& x){_con.push_back(x);}//出栈void pop(){_con.pop_back();}//数据个数size_t size(){return _con.size();}//判空bool empty(){return _con.empty();}//栈顶元素const T& top(){return _con.back();}

因为栈的底层是另外两种容器之一,所以我们可以直接去调用它们的成员函数来实现我们的成员函数入栈就是尾插,出栈即是尾删、依次类推。 

测试如下:


二.队列

队列不同于栈,队列是在队尾插入元素,在队头删除元素。但是我们知道,vector并不支持头部的插入删除操作,因为这样的效率很低,所以我们只推荐使用list来作为队列的底层


1.队列框架

	template<class T, class Container = list<T>>class queue{public:private:Container _con;};

2.功能实现

		//入队void push(const T& x){_con.push_back(x);}//出队void pop(){_con.pop_front();}//队尾元素T& back(){return _con.back();}const T& back()const{return _con.back();}//队头元素T& front(){return _con.front();}const T& front()const{return _con.front();}//数据个数size_t size()const{return _con.size();}//判空bool empty()const{return _con.empty();}

仍然是调用list的成员函数来实现queue的成员函数,测试如下:

 


三.扩展

除了vector、list之外,还有一种容器可以作为队列的底层——deque

 deque的底层是由多个长度相同的数组组成,而这些数组则由一个指针数组来管理

deque能够同时支持下标随机访问和头尾的插入删除,所以除了队列之外,在C++的底层,栈和队列实际上都是由deque来实现的

 

这里我们不对deque进行展开讲解,仅供小伙伴们了解。 


总结

stack和queue的使用和模拟实现都非常简单,也算是为前边学习的复杂模拟的一点小放松。

喜欢本篇文章的小伙伴记得一键三连,我们下期再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/595723.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CNAS软件测试公司有什么好处?如何选择靠谱的软件测试公司?

CNAS认可是中国合格评定国家认可委员会的英文缩写&#xff0c;由国家认证认可监督管理委员会批准设立并授权的国家认可机构&#xff0c;统一负责对认证机构、实验室和检验机构等相关机构的认可工作。 在软件测试行业&#xff0c;CNAS认可具有重要意义。它标志着一个软件测试公…

最新在线工具箱网站系统源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 系统内置高达72种站长工具、开发工具、娱乐工具等功能。此系统支持本地调用API&#xff0c;同时还自带免费API接口&#xff0c; 是一个多功能性工具程序&#xff0c;支持后台管理、上…

大学教材《C语言程序设计》(浙大版)课后习题解析 | 第十一、十二章

概述 本文主要提供《C语言程序设计》(浙大版) 第十一、十二章的课后习题解析&#xff0c;以方便同学们完成题目后作为参考对照。 专栏直达链接&#xff1a; 《C语言程序设计》(浙大版)_孟俊宇-MJY的博客-CSDN博客​http://t.csdnimg.cn/ZtcgY 一.第十一章&#xff08;指针进…

达梦DMHS-Manager工具安装部署

目录 1、前言 1.1、平台架构 1.2、平台原理 2、环境准备 2.1、硬件环境 2.2、软件环境 2.3、安装DMHS 2.3.1、源端DMHS前期准备 2.3.2、源端DMHS安装 2.3.3、目的端DMHS安装 3、DMHS-Manager客户端部署 3.1、启动dmhs web服务 3.2、登录web管理平台 4、添加DMHS实…

Linux系统基础知识

​ 一、Linux基础 1、简介 严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核的操作系统。 2、系统特点 开源(源代码可见)免费(Linux系统)注意:开源不一定免费安全性稳定可移植性好高性能(服务端没有图形页面)3、发…

list的使用

前言 我们前面已经对string和vector进行了学习使用&#xff0c;以及对他们的底层进行了模拟实现&#xff01;本期我们继续学习STL的另外一个容器---list。 本期内容介绍 什么是list&#xff1f; list的常用接口 什么是list? 还是来看看官方的文档说明&#xff01; 这里通过…

基于springboot实现教师人事档案管理系统项目【项目源码+论文说明】

基于springboot实现在线商城系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本ONLY在线商城系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理…

如何客观评价5G的现状?

前几天&#xff0c;在知乎上看到一个帖子&#xff0c;热度挺高&#xff1a; 看了一下帖子的回答&#xff0c;基本上都在骂5G。 作为通信行业从业者&#xff0c;我说说我自己的看法。大家姑且听听&#xff0c;一起交流一下。 我们目前所处的这个时代&#xff0c;有一个很大的特点…

python标准数据类型--列表常用方法

在Python中&#xff0c;列表&#xff08;List&#xff09;是一种非常常用的数据类型&#xff0c;用于存储一组有序的元素。Python提供了许多内置方法来操作列表&#xff0c;使得对列表的处理变得非常灵活和便捷。在本篇博客中&#xff0c;我们将介绍一些常用的列表方法&#xf…

《QT实用小工具·十二》邮件批量发送工具

1、概述 源码放在文章末尾 该项目实现了邮件的批量发送&#xff0c;如下图所示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef SMTPCLIENT_H #define SMTPCLIENT_H#include <QtGui> #include <QtNetwork> #if (QT_VERSION > QT_VERSION_CHECK(5,0,…

Redis中的持久化

持久化 .RDB手动触发save命令bgsave命令 自动触发bgsave的具体流程RDB的处理保存压缩校验 RDB的优缺点 AOF命令写入文件同步重写机制启动时恢复数据 本章重点回顾 . RDB RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发 手动触发…

约数与倍数-第12届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第45讲。 约数与倍数&#…