C++ 学习系列 -- std::stack 与 std::queue

一  std::stack 与 std::queue 分别是什么?

 两者均是 c++ 中的序列化容器,区别在于:

 std::stack   元素是先进后出

 std::queue 元素是先进先出

二  std::stack 与 std::queue 原理

1 std:statck

2. std::queue

两者底层容器可以是 list 也可以是 deque ;

为了保证 两个序列式容器的特点, 两者均不支持遍历,也不支持迭代器。

三  常见函数接口与使用

1.  std::stack

1.1 构造函数

std::stack<T,Container>::stack - cppreference.com

函数说明
stack()空构造函数

1.2  容器修改

              

函数说明
push在栈顶 放入元素
emplace在栈顶 放入元素,也可以放入元素类的参数,实现原地构造
pop弹出栈顶元素

1.3 容器访问

函数说明
top返回栈顶元素的引用

1.4 容器空间

函数说明
empty判断栈是否为空
size返回栈中元素个数

代码如下:

#include<iostream>
#include<stack>int main()
{// 1. constructorstd::stack<int> tmp_stack;// 2. Modifierstmp_stack.push(1);tmp_stack.push(2);tmp_stack.push(3);tmp_stack.push(3);tmp_stack.pop();    tmp_stack.emplace(4);tmp_stack.emplace(5);// 3. Element accessstd::cout << tmp_stack.top() << std::endl;std::cout << "------" << std::endl;// 4. Capacitystd::cout << tmp_stack.empty() << std::endl;std::cout << tmp_stack.size() << std::endl;std::cout << "------" << std::endl;while (!tmp_stack.empty()) {std::cout << tmp_stack.top() << " ";tmp_stack.pop();}return 0;
}

2. std::queue

1.1 构造函数

   https://en.cppreference.com/w/cpp/container/queue/queue

函数说明
queue空构造函数

1.2  容器修改

函数说明
push在队尾放入元素
emplace在队尾 放入元素,也可以放入元素类的参数,实现原地构造
pop弹出队首元素

1.3 容器访问

函数说明
front返回队首元素的引用
back返回队尾元素的引用

1.4 容器空间

函数说明
empty判断queue 是否为空
size返回queue中元素个数

   代码:

  

#include<iostream>
#include<queue>int main()
{// 1. constructorstd::queue<int> tmp_queue;// 2. Modifierstmp_queue.push(1);tmp_queue.push(2);tmp_queue.push(3);tmp_queue.push(3);tmp_queue.pop();tmp_queue.emplace(4);tmp_queue.emplace(5);// 3. Element accessstd::cout << tmp_queue.front() << std::endl;std::cout << tmp_queue.back() << std::endl;std::cout << "------" << std::endl;// 4. Capacitystd::cout << tmp_queue.empty() << std::endl;std::cout << tmp_queue.size() << std::endl;std::cout << "------" << std::endl;while (!tmp_queue.empty()) {std::cout << tmp_queue.front() << " ";tmp_queue.pop();}

  输出:

   

四  简单实现

下面代码中的 my_deque.h 为 这个博客中实现的 my_deque

C++ -- 学习系列 std::deque 的原理与使用-CSDN博客

1. my_stack

// my_stack.h#include"my_deque.h"template<typename T>
class my_stack
{
public:my_stack(){}~my_stack(){}void push(T& val){data.push_back(val);}void push(T&& val){data.push_back(val);}T& top(){return data.back();}void pop(){data.pop_back();}int size(){return data.size();}bool empty(){return data.empty();}private:my_deque<T, 16> data;};
// main.cpp
int main()
{// 1. constructorstd::stack<int> tmp_stack;// 2. Modifierstmp_stack.push(1);tmp_stack.push(2);tmp_stack.push(3);tmp_stack.push(3);tmp_stack.pop();tmp_stack.emplace(4);tmp_stack.emplace(5);// 3. Element accessstd::cout << tmp_stack.top() << std::endl;std::cout << "------" << std::endl;// 4. Capacitystd::cout << tmp_stack.empty() << std::endl;std::cout << tmp_stack.size() << std::endl;std::cout << "------" << std::endl;while (!tmp_stack.empty()) {std::cout << tmp_stack.top() << " ";tmp_stack.pop();}return 0;
}

输出:

  

2. my_queue

// my_queue.h#include"my_deque.h"template<typename T>
class my_queue
{
public:my_queue(){}~my_queue(){}void push(T& val){data.push_back(val);}void push(T&& val){data.push_back(val);}void pop(){data.pop_front();}T& front(){return data.front();}T& back(){return data.back();}bool empty(){return data.empty();}int size(){return data.size();}private:my_deque<T, 16>  data;};// main.cppint main()
{// 1. constructormy_queue<int> tmp_queue;// 2. Modifierstmp_queue.push(1);tmp_queue.push(2);tmp_queue.push(3);tmp_queue.push(3);tmp_queue.pop();// 3. Element accessstd::cout << tmp_queue.front() << std::endl;std::cout << tmp_queue.back() << std::endl;std::cout << "------" << std::endl;// 4. Capacitystd::cout << tmp_queue.empty() << std::endl;std::cout << tmp_queue.size() << std::endl;std::cout << "------" << std::endl;while (!tmp_queue.empty()) {std::cout << tmp_queue.front() << " ";tmp_queue.pop();}return 0;
}

 输出:

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

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

相关文章

黑豹程序员-架构师学习路线图-百科:HTML-网页三剑客

为什么需要HTML 在网站技术发达之前&#xff0c;千年来我们获取信息是通过书籍。电脑流行后我们看文章、小说通过txt文件。看图通过单独的图片流量工具看单个的图片文件。 而HTML把文字和图片一起展示&#xff0c;让今天的电子书成为可能。 另外一点&#xff0c;我们的信息是…

蜂蜜配送销售商城小程序的作用是什么

蜂蜜是农产品中重要的一个类目&#xff0c;其受众之广市场需求量大&#xff0c;但由于非人人必需品&#xff0c;因此传统线下门店经营也面临着痛点&#xff0c;线上入驻平台也有很多限制难以打造自有品牌&#xff0c;无法管理销售商品及会员、营销等&#xff0c;缺少自营渠道&a…

Linux常见操作命令(1)

​ 前言&#xff1a;作者也是初学Linux&#xff0c;可能总结的还不是很到位 ♈️今日夜电波&#xff1a;达尔文—林俊杰 0:30━━━━━━️&#x1f49f;──────── 4:06 &#x1f504; ◀️ …

集合在多线程下安全问题

如果在多线程下&#xff0c;同时操作同一个数据源&#xff0c;就会出现数据安全问题&#xff1a; A线程取出值为10&#xff0c;准备加5. 同时B线程也取出来10&#xff0c;减了5 C取出的时候有可能时15&#xff0c;也有可能时5。产生了数据安全问题。 方法有很多例如&#xff1a…

Acwing 143. 最大异或对

Acwing 143. 最大异或对 题目描述思路讲解代码展示 题目描述 思路讲解 这道题的启示是&#xff1a;字典树不单单可以高效存储和查找字符串集合,还可以存储二进制数字 思路:将每个数以二进制方式存入字典树,找的时候从最高位去找有无该位的异. 代码展示 #include<iostream…

uboot启动流程-涉及_main汇编函数

一. uboot启动流程涉及函数 本文简单分析一下 save_boot_params_ret调用的函数&#xff1a;_main汇编函数。 本文继之前文章的学习&#xff0c;地址如下&#xff1a; uboot启动流程-涉及s_init汇编函数_凌肖战的博客-CSDN博客 二. uboot启动流程涉及的 _main汇编函数 经过之…

鞋类 整鞋试验方法 剥离强度

声明 本文是学习GB-T 3903.3-2011 鞋类 整鞋试验方法 剥离强度. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 GB/T 3903 的本部分规定了整鞋鞋底与鞋帮或外底与外中底之间剥离强度的试验方法。 本部分适用于采用模压、硫化、注塑、灌注、胶…

Springboot对MVC、tomcat扩展配置

Springboot在web层的开发基本都是采用Springmvc框架技术&#xff0c;但是Springmvc中的某些配置在boot是没有的&#xff0c;我们就应该根据自己的需求进行对mvc扩展配置 Springboot1.x版本如何配置 通过注解Configuration一个类&#xff0c;继承webmvcconfigureradapter&#…

macOS 14 Sonoma 如何删除不需要的 4k 动态壁纸

概览 在升级到 macOS 14&#xff08;Sonoma&#xff09;之后&#xff0c;小伙伴们惊喜发现  提供了诸多高清&#xff08;4k&#xff09;动态壁纸的支持。 现在&#xff0c;从锁屏到解锁进入桌面动态到静态的切换一气呵成、无比丝滑。 壁纸显现可谓是有了“天水相连为一色&…

【SpringBoot学习】收藏的学习资料,精!

文章目录 Spring实战&#xff08;第五版&#xff09;&#xff1a; https://potoyang.gitbook.io/spring-in-action-v5/di-er-bu-fen-ji-cheng-spring南京大学-软件体系架构,结合SpringBoot Spring实战&#xff08;第五版&#xff09;&#xff1a; https://potoyang.gitbook.io/…

【农业生产模拟】WOFOST模型与PCSE模型实践

查看原文>>>【农业生产模拟】WOFOST模型与PCSE模型实践 WOFOST&#xff08;WorldFoodStudies&#xff09;和PCSE&#xff08;PythonCropSimulationEnvironment&#xff09;是两个用于农业生产模拟的模型&#xff1a;WOFOST是一个经过多年开发和验证的模型&#xff0c…

ElementUI之增删改及表单验证

⭐⭐本文章收录与ElementUI原创专栏&#xff1a;ElementUI专栏 ⭐⭐ ElementUI的官网&#xff1a;ElementUI官网 目录 一.前言 二.使用ElementUI完成增删改 2.1 后台代码 2.2 前端代码 三.使用ElementUI完成表单验证 一.前言 本章是继上一篇的基础之上在做完善&#xff0…

多网卡场景数据包接收时ip匹配规则

多网卡场景数据包接收时ip匹配规则 mac地址匹配规则 接收数据包时数据包中的目的mac地址匹配接收网卡的mac地址后&#xff0c;数据包才会继续被传递到网络层处理 ip地址匹配规则 图1&#xff1a; 参见&#xff1a;https://zhuanlan.zhihu.com/p/529160026?utm_id0 图2&am…

Python 接口测试之接口关键字封装

引言 我们使用RF做UI自动化测试的时候&#xff0c;使用的是关键字驱动。同样&#xff0c;Python做接口自动化测试的时候&#xff0c;也可以使用关键字驱动。但是这里并不是叫关键字驱动&#xff0c;而是叫数据驱动。而接口测试的关键字是什么呢&#xff1f; 我们数据驱动的载体…

IDEA 配置 Maven(解决依赖下载缓慢)

IDEA 配置 Maven&#xff08;解决依赖下载缓慢&#xff09; 这一篇主要介绍 Maven 的基本用法。等我之后学习到框架知识时&#xff0c;会完善此部分内容。 一、Maven 简介 Maven 是专门用于管理和构建 Java 项目的工具&#xff0c;Apache Maven 是一个项目管理和构建工具&#…

掌动智能:替代JMeter的压力测试工具有哪些

JMeter是一个广泛使用的开源压力测试工具&#xff0c;但在实际应用中&#xff0c;也有一些其他优秀的替代品可供选择。本文将介绍几个可替代JMeter的压力测试工具&#xff0c;它们在功能、性能和易用性方面都具有独特优势&#xff0c;可以满足不同压力测试需求的选择。 一、Gat…

【图论C++】Floyd算法(多源最短路径长 及 完整路径)

>>>竞赛算法 /*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在算法竞赛学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记&#xff…

uniapp - 微信小程序实现腾讯地图位置标点展示,将指定地点进行标记选点并以一个图片图标展示出来(详细示例源码,一键复制开箱即用)

效果图 在uniapp微信小程序平台端开发,简单快速的实现在地图上进行位置标点功能,使用腾讯地图并进行标点创建和设置(可以自定义标记点的图片)。 你只需要复制代码,改个标记图标和位置即可。

[GWCTF 2019]我有一个数据库

一开始打开是乱码 之前题目做过修复乱码的&#xff0c;得到这个 用dirsearch扫一下 一开始我是看到robots.txt 访问一下 访问一下phpinfo 也没啥&#xff0c;看到phpmyadimin 访问一下 没啥思路&#xff0c;看了wp 看到phpMyAdmin 4.8.1后台文件包含漏洞&#xff08;CV…

css实现四角圆边框

摘要&#xff1a; 做大屏的项目时&#xff0c;遇到很多地方要用到不同尺寸的盒子需要圆角的效果&#xff0c;所以不可能要求ui弄那么多图片的&#xff0c;并且那么多图片加载速度很慢的&#xff0c;比较臃肿&#xff0c;大屏要求的就是流畅&#xff0c;所以这用css加载很快的&a…