stack_stack没有成员back-程序员宅基地

技术标签: C++  

stack是一种先进后出的数据结构。stack除了最顶端元素外,没有其他办法去读取其他元素,因此stack不存在遍历行为。所以stack没有迭代器。

stack容器适配器的创建
由于 stack 适配器以模板类 stack<T,Container=deque>(其中 T 为存储元素的类型,Container 表示底层容器的类型)的形式位于头文件中,并定义在 std 命名空间里。

stack<int> values;
  • 上面这行代码,就成功创建了一个可存储 int 类型元素,底层采用 deque 基础容器的 stack 适配器。

上面提到,stack<T,Container=deque> 模板类提供了 2 个参数,通过指定第二个模板类型参数,我们可以使用出 deque 容器外的其它序列式容器,只要该容器支持 empty()、size()、back()、push_back()、pop_back() 这 5 个成员函数即可。

  • 在介绍适配器时提到,序列式容器中同时包含这 5 个成员函数的,有 vector、deque 和 list 这 3 个容器。因此,stack 适配器的基础容器可以是它们 3 个中任何一个。例如,下面展示了如何定义一个使用 list 基础容器的 stack 适配器:

std::stack<std::string, std::list<int>> values;

  • 可以用一个基础容器来初始化 stack 适配器,只要该容器的类型和 stack 底层使用的基础容器类型相同即可。例如:
std::list<int> values {1, 2, 3};
std::stack<int,std::list<int>> my_stack (values);

初始化后的 my_stack 适配器中,栈顶元素为 3,而不是 1。另外在第 2 行代码中,stack 第 2 个模板参数必须显式指定为 list(必须为 int 类型,和存储类型保持一致),否则 stack 底层将默认使用 deque 容器,也就无法用 lsit 容器的内容来初始化 stack 适配器。

  •  还可以用一个 stack 适配器来初始化另一个 stack 适配器,只要它们存储的元素类型以及底层采用的基础容器类型相同即可。例如:
std::list<int> values{ 1, 2, 3 };
std::stack<int, std::list<int>> my_stack1(values);
std::stack<int, std::list<int>> my_stack=my_stack1;
//std::stack<int, std::list<int>> my_stack(my_stack1);

可以看到,和使用基础容器不同,使用 stack 适配器给另一个 stack 进行初始化时,有 2 种方式,使用哪一种都可以。
注意,第 3、4 种初始化方法中,my_stack 适配器的数据是经过拷贝得来的,也就是说,操作 my_stack 适配器,并不会对 values 容器以及 my_stack1 适配器有任何影响;反过来也是如此。

stack容器适配器支持的成员函数

成员函数 	功能
empty() 	当 stack 栈中没有元素时,该成员函数返回 true;反之,返回 false。
size() 		返回 stack 栈中存储元素的个数。
top() 		返回一个栈顶元素的引用,类型为 T&。如果栈为空,程序会报错。
push(const T& val) 	先复制 val,再将 val 副本压入栈顶。这是通过调用底层容器的 push_back() 函数完成的。
push(T&& obj) 	以移动元素的方式将其压入栈顶。这是通过调用底层容器的有右值引用参数的 push_back() 函数完成的。
pop() 		弹出栈顶元素。
emplace(arg...) 	arg... 可以是一个参数,也可以是多个参数,但它们都只用于构造一个对象,并在栈顶直接生成该对象,作为新的栈顶元素。
swap(stack<T> & other_stack) 	将两个 stack 适配器中的元素进行互换,需要注意的是,进行互换的 2 个 stack 适配器中存储的元素类型以及底层采用的基础容器类型,都必须相同。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41078889/article/details/108081618

智能推荐

[Python从零到壹] 十二.机器学习之回归分析万字总结全网首发(线性回归、多项式回归、逻辑回归)_python回归分析-程序员宅基地

文章浏览阅读4.4w次,点赞1.5k次,收藏1.8k次。前一篇文章讲述了数据分析部分,主要普及网络数据分析的基本概念,讲述数据分析流程和相关技术,同时详细讲解Python提供的若干第三方数据分析库,包括Numpy、Pandas、Matplotlib、Sklearn等。本文介绍回归模型的原理知识,包括线性回归、多项式回归和逻辑回归,并详细介绍Python Sklearn机器学习库的LinearRegression和LogisticRegression算法及回归分析实例。进入基础文章,希望对您有所帮助。_python回归分析

将字符串进行驼峰式命名转换_字符串转驼峰命名-程序员宅基地

文章浏览阅读1.2k次。字符串函数: charAt():返回指定位置的字符 split():根据某个字符分割字符串,返回一个数组 toUpperCase():将字符串转换成大写格式 substr():截取从起始位置到结束位置的字符串(包含头包含尾) 扩:substring():截取从起始位置到结束位置的字符串(包含头不包含尾)数组函数: ..._字符串转驼峰命名

mysql数据库中某字段一部分乱码-程序员宅基地

文章浏览阅读904次。笔者问题:mysql表(表中数据就是乱码,可能是插入时编码问题,这个问题以后解决)导出excel时数据中有乱码(但是在页面上查看是正常的),我们希望能导出一份没有中文乱码的excel&#26681;&#25454;&#28909;&#21147;&#31449;&#20013;&#19968;&#27425;&#..._mysql中longtext字段前一半正常一半乱码

RFID防伪设计(物联网工程课程设计)DAY4---LCD屏幕显示_rfid板子设计-程序员宅基地

文章浏览阅读1k次。重点来了这个课程设计中硬件方面一共会有两个重点其中一个自然就是今天要做的OLCD屏幕的驱动第二个是RFID标签的读写由于我买的是野火的I2C OLCD屏幕,自然选择野火自带的例程进行修改,让其能够适配HAL库的开发当然既然是I2C的OLCD,那必然离不开I2C协议值得一提的是,在stm32要实现I2C,可以选择两种方式1.硬件I2C2.软件模拟I2C虽然火哥在标准库的视频中说过硬件I2C可能会存在一定的问题,但是既然买了板子,当然要用哇,不用岂不是暴殄天物。所以,我们还是在cubemx中_rfid板子设计

使用Cygwin, Cygwin/X 介绍-程序员宅基地

文章浏览阅读1.7k次。 空间Using CygwinAs noted, Cygwin provides a Unix-like environment under Windows. The installation directory (by default, c:\cygwin) is the root of the Unix-like file system, which contains bin, et..._cygwin/x

#如何查看oracle的sid_oracle 只读账号 怎么查看sid-程序员宅基地

文章浏览阅读2.5k次,点赞2次,收藏3次。#如何查看oracle的sid转载:https://www.cnblogs.com/lcword/p/8214334.html1、怎样查看Oracle的数据库名称sid用sysdba身份登录 比如 conn sys/密码 as sysdba 匿名管理员登陆执行 select name form Vdatabase;(常用的方法)或是执行select∗fromVdatabase; (常用的方..._oracle 只读账号 怎么查看sid

随便推点

05-SA8155 QNX Hypervisor 之 Virtio-i2c虚拟I2C_sa8155规格书-程序员宅基地

文章浏览阅读6k次,点赞17次,收藏67次。virtio 是一种 I/O 半虚拟化解决方案,是一套通用 I/O 设备虚拟化的程序,是对半虚拟化Hypervisor 中的一组通用 I/O 设备的抽象。提供了一套上层应用与各 Hypervisor 虚拟化设备(KVM,Xen,VMware等)之间的通信框架和编程接口,减少跨平台所带来的兼容性问题,大大提高驱动程序开发效率。在完全虚拟化的解决方案中,guest VM 要使用底层 host 资源,需要 Hypervisor 来截获所有的请求指令,然后模拟出这些指令的行为,这样势必会带来很多性能上的开销。_sa8155规格书

设计模式——代理模式详解(Java版)_java代理模式详解-程序员宅基地

文章浏览阅读5.5k次,点赞56次,收藏117次。看完这篇轻轻松松掌握代理模式_java代理模式详解

NRF52832学习笔记(20)——三轴加速度BMA423使用_hitolo下降沿触发-程序员宅基地

文章浏览阅读534次,点赞2次,收藏3次。一、简介BMA423 采用内部加速计的原始数据并在内部处理数据,从而为开发人员提供有用的结果。这可为微控制器减掉一些负载并加快开发速度。当在可穿戴健身应用中使用时,它可以检测用户是静止不动、跑步还是走路。Bosch Sensortec 为其所有传感器提供固件。在给 BMA423 上电时,它会经历一个内部上电复位 (POR) 序列。在系统 POR 之后,微控制器应运行 Bosch 的 BMA423 初始化程序,以正确配置芯片。初始化程序首先读取内部芯片 ID,并把该 ID 与存储在固件中的芯片 ID_hitolo下降沿触发

matlab交通通行量模型_KDD2020|混合时空图卷积网络:更精准的时空预测模型-程序员宅基地

文章浏览阅读439次。『运筹OR帷幄』转载作者:高德机器学习团队 高德技术报道【导读】时空预测在天气预报、运输规划等领域有着重要的应用价值。交通预测作为一种典型的时空预测问题,具有较高的挑战性。以往的研究中主要利用通行时间这类交通状态特征作为模型输入,很难预测整体的交通状况,本文提出的混合时空图卷积网络,利用导航数据大大提升了时空预测的效果(本文作者高德机器学习团队,论文已被收录到KDD2020)。论文..._stgcn matlab

微信小程序使用tensorflow做人脸识别检测卡顿的部分解决思路_tensorflow.js 微信小程序-程序员宅基地

文章浏览阅读1.4k次。在例如相机监听事件onCameraFrame里,最好是每一帧的数据更新操作上在setDate的回调里处理,,防止多次setDate,但数据还没更新完下一帧的setDate又进来,导致堵塞。清除张量,tf.dispose()在web端生效,在小程序端不能清除张量占用空间,需要挨个清除tensor.dispose()或者tf.dispose(tensor)防止内存溢出,特别是在ios上。_tensorflow.js 微信小程序

07vuex笔记 module 03_vuex模块化-程序员宅基地

文章浏览阅读119次。// App.vue<template> <div id="app"> </div></template><script>import { mapState, mapActions } from 'vuex';export default { name: 'app', computed: mapSta..._vuex模块化

推荐文章

热门文章

相关标签