STL容器适配器 -- stack和queue(使用+实现)(C++)

stack和queue

  • stack
    • stack的介绍
    • stack的使用
    • stack的实现
  • queue
    • queue的介绍
    • queue的使用
    • queue的实现
  • deque
    • 简单介绍deque(双端队列)
      • 双开口
      • 连续打引号的原因
    • deque底层结构
    • deque的迭代器封装结构(复杂)
    • deque的优缺点

栈和队列数据结构+画图分析如果对栈和队列的结构不了解的,可以先看该链接的内容

stack

使用stack时需要头文件#include<stack>

stack的介绍

stack是一种容器适配器,用于具有后进先出(LIFO)的环境中。只能从容器的一端(栈顶),执行删除、插入和提取操作。

stack是作为容器适配器实现的,容器适配器是对特定容器类封装,作为其底层的容器。vector、deque、list均符合特定的底层容器需求,如果没有指定特定的底层容器,默认使用deque

stack的使用

函数接口说明
stack()构造空的栈
empty()判断栈是否为空
size()返回栈中的元素个数
top()返回栈顶元素的引用
push()将val压栈
pop()出栈顶元素

test:


void test_stack()
{stack<int> st;st.push(1);st.push(2);st.push(3);st.push(4);cout << st.size() << endl;while (!st.empty()){cout << st.top() << " ";st.pop();}cout << endl;
}

注意:从栈的接口可以看出,栈实际是一种特殊的vector,使用vector完全可以模拟实现stack

stack的实现

stack接口的实现是对deque容器接口的封装。

#include <deque>namespace kpl
{//容器可以使用vector,deque容器在本博客最后一个知识点介绍//template<class T, class Container = vector<T>>//template<class T, class Container = list<T>>template<class T, class Container = deque<T>>class stack{public:stack(){}void push(const T& x){_con.push_back(x);}void pop(){_con.pop_back();}T& top(){return _con.back();}const T& top() const{return _con.back();}size_t size(){return _con.size();}bool empty(){return _con.empty();}private:Container _con;};
}

queue

使用queue时需要头文件#include<queue>

queue的介绍

queue是一种容器适配器,用于具有先进先出(FIFO)的环境中。从容器的一端插入元素,另一端提取元素。

queue作为容器适配器实现,容器适配器是对特定容器类封装,作为其底层的容器。deque、list符合特定的底层容器需求,如果没有为queue实列化指定特定的底层容器,默认使用deque

queue的使用

函数接口说明
queue()构造空的队列
empty()判断队列是否为空
size()返回队列中的元素个数
front()返回队头元素的引用
back()返回队尾元素的引用
push()在队尾将val入列
pop()在队头元素出队列

test:

void test_queue()
{queue<int> q;q.push(1);q.push(2);q.push(3);q.push(4);cout << "size:" << q.size() << endl;cout << "front:" << q.front() << endl;q.pop();cout << "back:" << q.back() << endl;while (!q.empty()){cout << "front:" << q.front() << " ";q.pop();}cout << endl;
}

queue的实现

因为queue的接口有头插和尾插,使用vector封装效率底,所以可以借助list模拟实现。这里我们依旧使用的默认容器deque

queue接口的实现是对deque容器接口的封装。

#include <deque>namespace kpl
{//template<class T, class Container = list<T>>template<class T, class Container = deque<T>>class queue{public:queue(){}bool empty(){return _con.empty();}size_t size(){return _con.size();}T& front(){return _con.front();}const T& front() const{return _con.front();}T& back(){return _con.back();}const T& back() const{return _con.back();}void push(const T& x){_con.push_back(x);}void pop(){_con.pop_front();}private:Container _con;};
}

deque

简单介绍deque(双端队列)

概念:是一种双开口“连续”空间的数据结构。

双开口

双开口

连续打引号的原因

原因:deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成,分段连续。

deque底层结构

底层结构

deque的迭代器封装结构(复杂)

deque的迭代器

deque的优缺点

deque的优缺点决定了它适合当stack和queue的底层数据结构
deque的优缺点

  1. stack和queue不需要遍历(deque不适合遍历),只需要在固定的一端或者两端操作即可。
  2. stack元素在增长时,deque比vector的效率高(不需要搬移数据),queue元素在增长是,内存使用率高,效率也高。

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

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

相关文章

Java版Spring Cloud+Spring Boot+Mybatis+uniapp知识付费平台讲解+免费搭建 qt

&#xfeff;Java版知识付费源码 Spring CloudSpring BootMybatisuniapp前后端分离实现知识付费平台 提供职业教育、企业培训、知识付费系统搭建服务。系统功能包含&#xff1a;录播课、直播课、题库、营销、公司组织架构、员工入职培训等。 提供私有化部署&#xff0c;免费售…

《面试1v1》Kafka的ack机制

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

P25透明屏:探究在商业广告领域的应用表现

P25透明屏是一种新型的显示屏技术&#xff0c;具有高透明度和高分辨率的特点。 它可以将图像或视频直接投影到透明的表面上&#xff0c;使得观众可以透过屏幕看到背后的景物&#xff0c;同时也能够看到屏幕上的内容。 P25透明屏广泛应用于商业展示、户外广告、产品展示等领域…

年薪930万,谷歌薪资大揭秘

硅谷大厂中&#xff0c;谷歌员工称得上是科技行业中收入最高的一些人。 据统计&#xff0c;谷歌工程师在2022年总薪酬中位数为279,802美元&#xff08;约200万人民币&#xff09;&#xff0c;但这仅是基本工资。 如果计入股权和奖金&#xff0c;他们的收入甚至更高。 近来&am…

PHP-Mysql好运图书管理系统--【白嫖项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 首页必要的项目知识ThinkPHP的MVCThinkTemplateThinkPHP 6和ThinkPHP 5 phpStudy 设置导数据库前台展示页面后台的管理界面数据库表结构项目目录如图&#xff1a;代码部分&a…

Mybatis引出的一系列问题-Spring事务的探究

1 spring事务的传播特性 package com.zs.service;Service public class UserService {Autowiredprivate UserDao userDA0;Transactionalpublic void transfer(String fromName, String toName, Integer money) {userDA0.out(fromName, money);int a 1 / 0;userDA0.in(toName,…

[CKA]考试之一个 Pod 封装多个容器

由于最新的CKA考试改版&#xff0c;不允许存储书签&#xff0c;本博客致力怎么一步步从官网把答案找到&#xff0c;如何修改把题做对&#xff0c;下面开始我们的 CKA之旅 题目为&#xff1a; Task 创建一个Pod&#xff0c;名字为kucc1&#xff0c;这个Pod包含4容器&#xff…

思科模拟器配置静态路由(下一跳使用IP)

Router0配置代码&#xff1a;##端口配置 Router(config)#int fastEthernet 0/0 Router(config-if)#ip address 192.168.10.254 255.255.255.0 Router(config-if)#no shutdown Router(config-if)#int fastEthernet 0/1 Router(config-if)#ip address 192.168.20.1 255.255.255.2…

pycharm——树状图

from pyecharts import options as opts from pyecharts.charts import Treedata [{"children": [{"name": "计算机"},{"children": [{"children": [{"name": "主机"}], "name": "硬盘…

真机搭建中小网络

这是b站上的一个视频&#xff0c;演示了如何搭建一个典型的中小网络&#xff0c;供企业使用 一、上行端口&#xff1a;上行端口就是连接汇聚或者核心层的口&#xff0c;或者是出广域网互联网的口。也可理解成上传数据的端口。 二、下行端口&#xff1a;连接数据线进行下载的端…

一百四十二、Linux——查看Linux服务器架构的版本类型

一、目的 查看已经安装好的Linux服务器架构的版本类型&#xff0c;看服务器版本是32位还是64位 而且可以区分出是kettle的文件x86或x86_64&#xff0c;x86是32位&#xff0c;而x86_64是64位 注意&#xff1a; 32位的查询结果为i386、i686 64位的查询结果为x86_64 二、Linu…

VBA技术资料1-146

VBA技术资料本周更新较多&#xff1a;单值查找并提示结果&#xff1b;多值查找并提示结果&#xff1b;复制整个数据范围到PowerPoint&#xff1b;更改PowerPoint文本框字体大小&#xff1b;调整PowerPoint图像为整幻灯片&#xff1b;在PowerPoint中添加末尾幻灯片&#xff1b;在…

Spring MVC应用的开发步骤

Spring MVC应用的开发步骤 Spring MVC应用的开发步骤如果以异步方式提交请求利用XML配置文件配置控制器类 Spring MVC应用的开发步骤 下面简单介绍Spring MVC应用的开发步骤。 ① 在web.xml文件中配置核心控制器DispatcherServlet处理所有的HTTP请求。 由于Web应用是基于请求/…

C语言基础知识点一

C语言基础知识点一&#xff1a; 1.数据类型 2.bool类型&#xff1a; 使用bool时时&#xff0c;需要增加<stdbool.h>头文件。 说明&#xff1a;bool 类型只有非零&#xff08;true&#xff09;和零&#xff08;false&#xff09;两种值。 如: if&#xff08;-1&#xf…

【ARM Coresight 系列文章 2.3 - Coresight 寄存器】

文章目录 Coresight 寄存器介绍1.1 ITCTRL&#xff0c;integration mode control register1.2 CLAIM寄存器1.3 DEVAFF(Device Affinity Registers)1.4 LSR and LAR1.5 AUTHSTATUS(Authentication Status Register) Coresight 寄存器介绍 Coresight 对于每个 coresight 组件&am…

EXCEL,vlookup以及数据去重

1&#xff0c;新建一个work表格&#xff0c;将数据copy进来&#xff0c;并做简单处理&#xff0c;让看起来舒服 2&#xff0c;使用vlookup函数查找数据是否在库中 注意:上图中的Table_array A1:C152&#xff0c;这个值要加绝对引用&#xff0c;写成&#xff1a; $A$1:$C$15…

Windows下安装Hive(包安装成功)

Windows下安装Hive Hive与Hadoop的版本选择很关键&#xff0c;千万不能选错&#xff0c;否则各种报错。一、Hive下载1.1、官网下载Hive1.2、网盘下载Hive 二、解压安装包&#xff0c;配置Hive环境变量2.1、环境变量新增&#xff1a;HIVE_HOME2.2、修改Path环境变量&#xff0c;…

flutter开发实战-flutter_spinkit实现多种风格进度指示器

flutter开发实战-flutter_spinkit实现多种风格进度指示器 最近开发过程中flutter_spinkit&#xff0c;这个拥有多种种风格加载指示器 一、flutter_spinkit 引入flutter_spinkit # 多种风格的模糊进度指示器flutter_spinkit: ^5.1.0效果示例 const spinkit SpinKitRotatingC…

【C#学习笔记】类型转换

文章目录 类型转换字符转数字GetNumericValueConvert.ToInt32隐式转换计算 字符串转数字Parse 或 TryParse 方法 字节数组转整数 as&#xff0c;is强制类型转换isas 用户定义的转换 类型转换 我们简单地将值类型分为5种&#xff1a;整数型&#xff0c;浮点型&#xff0c;布尔型…

【Rust】Rust学习

文档&#xff1a;Rust 程序设计语言 - Rust 程序设计语言 简体中文版 (bootcss.com) 墙裂推荐这个文档 第一章入门 入门指南 - Rust 程序设计语言 简体中文版 第二章猜猜看游戏 猜猜看游戏教程 - Rust 程序设计语言 简体中文版 (bootcss.com) // 导入库 use std::io; use s…