STL中stack的使用

目录

一、stack类介绍和使用

stack类介绍

stack类定义

stack类常见构造函数

stack数据操作

empty()函数

top() pop() 和 push() 函数 

size()函数

swap()函数


一、stack类介绍和使用

stack类介绍

1.stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。

2.stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出

3.stack的底层容器可以是任何标准的容器类模版或者一些其他特定的容器类,这些容器类应该支持一下操作:

·empty:判空操作

·back:获取尾部元素操作

·push_back:尾部插入元素操作

·pop_back:尾部删除元素操作

4.标准容器vector、deque、list均符合这些需求,默认情况下,如果没有为stack指定特定的底层容器,默认情况下使用deque

stack类定义

template <class T, class Container = deque<T> > class stack;

stack类为类模板,所以在使用时需要带上类型表示一个具体的类,例如数据类型为int类型的stack使用时需要写为stack<int>

stack类常见构造函数

#include <iostream>
using namespace std;
#include <stack>
int main(){
    stack<int> st;
    st.push(1);
    st.push(3);
    st.push(1);
    st.push(4);
    
    while (!st.empty()) {
        cout << st.top() << " ";
        st.pop();
    }
    cout << endl;
    
    return 0;
}
//4 1 3 1 

stack数据操作

empty()函数

使用empty()函数可以判断调用对象栈是否为空栈

#include <iostream>
using namespace std;
#include <stack>
int main(){
    stack<int> st;
    st.push(1);
    st.push(3);
    st.push(1);
    st.push(4);
    
    while (!st.empty()) {
        cout << st.top() << " ";
        st.pop();
    }
    cout << endl;
    
    cout << "栈是否为空:";
    cout << st.empty() << endl;
    return 0;
}
输出结果:
4 1 3 1 
栈是否为空:1

top() pop() 和 push() 函数 

top()函数获取调用对象栈中的栈顶元素

pop()函数可以弹出调用对象栈的栈顶元素

 

push()函数可以向调用对象栈内插入数据

注意:

1️⃣当栈中没有元素时,调用pop()函数会出现断言错误

2️⃣如果栈为空时取栈内元素将会出现断言错误

#include <iostream>
using namespace std;
#include <stack>
int main(){
    stack<int> st;
    st.push(4);
    st.push(1);
    st.push(3);
    st.push(1);
    
    while (!st.empty()) {
        cout << st.top() << " ";//取出栈顶元素
        st.pop();//弹出栈顶元素
    }
    cout << endl;

    return 0;
}

size()函数

size()函数可以获取调用对象栈中的有效数据个数

 

#include <iostream>
using namespace std;
#include <stack>
int main(){
    stack<int> st;
    st.push(4);
    st.push(1);
    st.push(3);
    st.push(1);
    
    cout << "栈中数据个数为:" <<st.size() << endl;
    
    while (!st.empty()) {
        cout << st.top() << " ";//取出栈顶元素
        st.pop();//弹出栈顶元素
    }
    cout << endl;
    
    cout << "栈中数据个数为:" <<st.size() << endl;

    return 0;
}
输出结果:
栈中数据个数为:4
1 3 1 4 
栈中数据个数为:0

swap()函数

swap()函数可以交换调用对象栈和指定对象栈

#include <iostream>
using namespace std;
#include <stack>
int main(){
    stack<int> st;
    st.push(4);
    st.push(1);
    st.push(3);
    st.push(1);
    
    stack<int> st1;
    st1.push(0);
    st1.push(2);
    st1.push(5);
    
    st.swap(st1);
    while (!st1.empty()) {
        cout << st1.top() << " ";//取出栈顶元素
        st1.pop();//弹出栈顶元素
    }
    cout << endl;

    
    while (!st.empty()) {
        cout << st.top() << " ";//取出栈顶元素
        st.pop();//弹出栈顶元素
    }
    cout << endl;
    return 0;
}
输出结果:
1 3 1 4 
5 2 0 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

骨传导耳机防踩雷秘诀是什么?六大选购技巧独家揭秘!

相信大家都已经深有体会&#xff0c;拿那种常规的入耳式无线蓝牙耳机来做运动耳机&#xff0c;很难满足运动需要。如果选择前两年流行的颈挂式无线运动蓝牙耳机&#xff0c;虽然简单轻巧&#xff0c;但也是入耳式设计&#xff0c;长时间佩戴耳朵不舒服。这样看来&#xff0c;运…

【云原生】kubernetes中的认证、权限设置--RBAC授权原理分析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

金属切削机床5G智能工厂工业物联数字孪生,推进制造业数字化转型

金属切削机床5G智能工厂工业物联数字孪生&#xff0c;推进制造业数字化转型。随着工业4.0时代的到来&#xff0c;制造业正面临着前所未有的变革与挑战。在这场变革中&#xff0c;金属切削机床智能工厂工业物联数字孪生平台正成为推动制造业数字化转型的重要力量。 数字孪生是指…

快手万合通脚本,磁力广告挂机变现项目,号称单窗口日收益10+(教程+软件)

在这个项目中&#xff0c;我们采用一种简便的方法来获取额外收入。比如&#xff1a; 1. 主账号准备&#xff1a;首先&#xff0c;确保拥有一个已开通磁力万合功能的快手主账号。账号需拥有至少一万粉丝&#xff0c;以确保广告收益。 2. 创建快手小号&#xff1a;无需粉丝基础…

RabbitMQ不完整的笔记

同步的不足 1、拓展性差&#xff0c;当要添加功能时&#xff0c;需要在原来的功能代码上做修改&#xff0c;高耦合。 2、性能下降&#xff0c;调用者需要等待服务提供者执行完返回结果后&#xff0c;才能继续向下执行 3、级联失败&#xff0c;由于我们是基于OpenFeign调用交易…

JDBC知识

JDBC是什么? 这工作中我们针对数据库的操作,实际上很少会用到SQL语句,通过命令行/图形化来操作数据库,更多的是通过主流的编程语言来对数据库进行操作,即使通过代码来操作数据,我们还是会使用到SQL语句,所以掌握SQL语句也是很重要的. 如何通过代码操作数据库? 通过代码操作…

电脑缺少运行库,无法启动程序

在我们使用一些软件的时候&#xff0c;由于电脑缺少一些运行库&#xff0c;导致无法启动应用软件&#xff0c;此时需要我们安装缺少的运行库。 比如当电脑提示&#xff1a; Cannot load library Qt5Xlsx.dll 我们就需要下载C得运行库&#xff0c;以满足软件运行需要。 下载链…

特别实用的8个机器学习算法总结!建议收藏,反复观看!

个人主页&#xff1a;.Boss.-CSDN博客 目录 1.线性回归&#xff08;Linear Regression&#xff09; 2.多项式回归&#xff08;Polynomial Regression&#xff09; 3.岭回归&#xff08;Ridge Regression&#xff09; 4.Lasso回归&#xff08;Lasso Regression&#xff09; …

杰理-7014配置

杰理-7014配置 1.复制 7012A7 添加一个板级 2.根据自己的功能修改板级 & 以下修改&#xff08;4M 7014f3&#xff09; download.bat 修改调用文件 0x3E0000计算方法 echo offecho ******************************************************************************** e…

【Linux】开发工具入门指南,轻松掌握你的开发利器

开发工具 1. 软件包管理器yum1.1 软件包安装方式1.2 yum的"三板斧"1.3 yum的周边 2. 开发工具3. 编辑器vim4. 编译器gcc、g5. 项目自动化构建工具make、Makefile6. 进度条小程序7. 调试器gdb 1. 软件包管理器yum 1.1 软件包安装方式 源代码安装&#xff1a;用户手动…

vue中大屏可视化适配所有屏幕大小

1. 外部盒子 .screenBox {width: 100vw;height: 100vh;background: url("/assets/images/bg.png") no-repeat;background-size: cover; }2.比例盒子 外层盒子css定义 .boxScale {width: 1920px;height: 1080px;background-color: orange;transform-origin: left top;…

分享一个在linux中运行通义千问的方法

分享一个在linux中和通义千问交互的方法 效果展示: 整体步骤 分享一个在linux中和通义千问交互的方法效果展示:一、在阿里云appflow控制台创建连接流1、通过以下地址,在灵积平台创建个API-KEY,用于通义千问的连接凭证2、点击连接流-创建连接流3、第一步选择webhook4.第二步…

电磁兼容整改时磁环怎么选型

电磁兼容整改时磁环怎么选型 磁环的选型错误磁环特性纳米微晶磁环磁环选型示例磁环选型 一条线缆两端都有设备&#xff0c;那磁环应该放在哪里&#xff1f; 我们怎么样来选择这个磁环&#xff0c;通过磁环的吸收作用&#xff0c;让辐射的强度和传导发射的这个强度衰减更大的那我…

OpenCASCADE入门(2)——openCasCade7.6.0版本的exe方式安装,vs2017环境配置,编译和使用draw

3rd party Components | Open CASCADE Technology 目录 引出安装好vs2017和occt7.6设置环境变量 启动occt和编译关于custom.bat批处理文件双击运行 打开draw使用方式一&#xff1a;双击draw.bat批处理vs设置启动项 总结其他自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.进…

【Vue】v-for中的key

文章目录 一、引入问题二、分析问题 一、引入问题 语法&#xff1a; key属性 "唯一值" 作用&#xff1a;给列表项添加的唯一标识。便于Vue进行列表项的正确排序复用。 为什么加key&#xff1a;Vue 的默认行为会尝试原地修改元素&#xff08;就地复用&#xff09;…

盘点那些对公关理解的误区

逢年过节回老家&#xff0c;亲朋好友都会问&#xff0c;你在北京做什么工作啊&#xff1f;小马识途营销顾问有几次说是做公关的&#xff0c;得到的回应很怪异&#xff0c;“那你酒量一定不错”“就是经常去酒店的那种吗&#xff1f;”“公关小姐&#xff1f;公关先生&#xff1…

[有监督学习]4.详细图解支持向量机

支持向量机 支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一种应用范围非常广泛的算法&#xff0c;既可以用于分类&#xff0c;也可以用于回归。 本节将介绍如何将线性支持向量机应用于二元分类问题&#xff0c;以间隔&#xff08;margin&#…

提升船舶安全性与效率:隔离驱动芯片的应用

随着科技的不断发展&#xff0c;船舶行业也在不断迎来新的技术革新&#xff0c;其中隔离驱动芯片作为一种关键的电子元件&#xff0c;在船舶领域发挥着重要作用。本文将深入探讨隔离驱动芯片在船舶领域的应用及其技术特点。 隔离驱动芯片提升船舶系统安全性 船舶作为大型交通工…