C++之容器std::stack类empty、size、top、push、emplace、pop、swap应用总结(二百二十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:C++之容器std::stack类empty、size、top、push、emplace、pop、swap应用总结。

2.函数功能介绍

1.C++提供了多种容器类型,以下是一些常见的C++容器:

  1. 向量(vector):动态数组,支持快速随机访问和动态大小调整。

  2. 链表(list):双向链表,支持高效的插入和删除操作。

  3. 堆栈(stack):后进先出(LIFO)的数据结构,只能在顶部进行插入和删除。

  4. 队列(queue):先进先出(FIFO)的数据结构,只能在前端插入,在后端删除。

  5. 双端队列(deque):双端队列,支持在前端和后端进行插入和删除。

  6. 集合(set):集合中的元素是唯一的,并且按特定排序规则进行存储。

  7. 映射(map):键值对的集合,每个键只能在映射中出现一次。

  8. 哈希表(unordered_set、unordered_map):基于散列函数实现的集合和映射。

这些容器都属于STL(标准模板库)的一部分,每个容器都有其特定的用途和适用场景。选择适当的容器能够提高程序的效率和可读性。

2.std::stack是C++ STL(标准模板库)中提供的容器类,用于实现栈数据结构。下面是对std::stack类中一些常用的成员函数的作用解释,不包含代码示例:

  1. empty(): 返回一个布尔值,表示栈是否为空。如果栈为空,则返回true;否则,返回false。

  2. size(): 返回一个整数值,表示栈中元素的个数。

  3. top(): 返回栈顶元素的引用,但不删除该元素。如果栈为空,调用该函数将导致未定义的行为。

  4. push(): 接收一个元素,并将其添加到栈顶。新元素被添加后,成为新的栈顶元素。

  5. emplace(): 类似于push()函数,但是可以在栈中构造元素,而无需创建临时对象。

  6. pop(): 移除栈顶元素,但不返回它的值。如果栈为空,调用该函数将导致未定义的行为。

  7. swap(): 将当前的栈与另一个栈进行交换。交换后,两个栈中的元素也会互相交换。

3.应用实例

<1>. empty():判断堆栈是否为空。

#include <iostream>
#include <stack>int main() {std::stack<int> myStack;if (myStack.empty()) {std::cout << "Stack is empty." << std::endl;} else {std::cout << "Stack is not empty." << std::endl;}return 0;
}

注意:判断堆栈stack是否为空,因为没有插入数据,所以为空。

<2>. size():获取堆栈中元素的数量。

#include <iostream>
#include <stack>int main() {std::stack<int> myStack;myStack.push(1);myStack.push(2);myStack.push(3);std::cout << "Size of stack: " << myStack.size() << std::endl;return 0;
}

注意:获取堆栈stack中的元素数量,因为插入数据3条数据,所以size等于3。

<3>. top():获取堆栈顶部元素的值。

#include <iostream>
#include <stack>int main() {std::stack<int> myStack;myStack.push(1);myStack.push(2);myStack.push(3);int topElement = myStack.top();std::cout << "Top element of stack: " << topElement << std::endl;return 0;
}

注意:回到堆栈stack的栈顶位置。

<4>. push():将元素压入堆栈的顶部。

#include <iostream>
#include <stack>int main() {std::stack<int> myStack;myStack.push(1);myStack.push(2);myStack.push(3);std::cout << "Size of stack after pushing elements: " << myStack.size() << std::endl;return 0;
}

注意:向堆栈stack的压入三个元素。

<5>. emplace():在堆栈的顶部就地构造元素。

#include <iostream>
#include <stack>class MyClass {
public:MyClass(int value) : data(value) {std::cout << "Constructor called for value: " << data << std::endl;}private:int data;
};int main() {std::stack<MyClass> myStack;myStack.emplace(1);myStack.emplace(2);myStack.emplace(3);return 0;
}

注意:向堆栈中插入三个键值。

<6>. pop():移除堆栈顶部的元素。

#include <iostream>
#include <stack>int main() {std::stack<int> myStack;myStack.push(1);myStack.push(2);myStack.push(3);myStack.pop();std::cout << "Size of stack after popping element: " << myStack.size() << std::endl;return 0;
}

注意:移除栈顶元素。

<7>. swap():交换两个堆栈的内容。

#include <iostream>
#include <stack>int main() {std::stack<int> stack1;std::stack<int> stack2;stack1.push(1);stack1.push(2);stack1.push(3);stack2.push(4);stack2.push(5);std::cout << "Size of stack1 before swap: " << stack1.size() << std::endl;std::cout << "Size of stack2 before swap: " << stack2.size() << std::endl;stack1.swap(stack2);std::cout << "Size of stack1 after swap: " << stack1.size() << std::endl;std::cout << "Size of stack2 after swap: " << stack2.size() << std::endl;return 0;
}

注意:swap交换两个堆栈的值。

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

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

相关文章

Linux 本地 Docker Registry本地镜像仓库远程连接【内网穿透】

Linux 本地 Docker Registry本地镜像仓库远程连接 文章目录 Linux 本地 Docker Registry本地镜像仓库远程连接1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址…

基于matlab实现的中点放炮各类地震波时距曲线程序

完整程序&#xff1a; clear all dx50;x-500:dx:500;%炮检距 h100;V11500; theta25*pi/180; V2V1/sin(theta); t1sqrt(x.*x4*h*h)/V1;%反射波时距曲线 t2abs(x)./V1;%直达波时距曲线 %折射波时距曲线 xm2*h*tan(theta);%求盲区 k1; for i1:length(x) if x(i)<-xm …

基于docker进行Grafana + prometheus实现服务监听

基于docker进行Grafana Prometheus实现服务监听 Grafana安装Prometheus安装Jvm监控配置服务器主机监控(基础cpu&#xff0c;内存&#xff0c;磁盘&#xff0c;网络) Grafana安装 docker pull grafana/grafanamkdir /server/grafanachmod 777 /server/grafanadocker run -d -p…

POJ 3977 Subset 折半枚举+二分搜素+双指针

一、题目大意 我们有N&#xff08;N<35&#xff09;个元素&#xff0c;从中选取一个子集&#xff0c;使得它的元素求和的绝对值最小&#xff0c;如果有多个可行解&#xff0c;选择元素最小的。 输出最优子集的元素总和绝对值&#xff0c;和最优子集元素的数量。 二、解题…

JavaWeb 学习笔记 7:Filter

JavaWeb 学习笔记 7&#xff1a;Filter 1.快速开始 使用过滤器的方式与 Servlet 类似&#xff0c;要实现一个Filter接口&#xff1a; WebFilter("/*") public class FirstFilter implements Filter {public void init(FilterConfig filterConfig) throws ServletE…

多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出

多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出 目录 多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出…

《向量数据库指南》——向量搜索库Faiss 迁移到 Milvus 2.x

Faiss -> Milvus 2.x 1. Faiss 数据准备 前提条件是用户已经准备好了自己的 faiss 数据文件。(为了能快速体验,在项目源码的 testfiles 目录下放置了 faiss 测试数据方便用户体验: faiss_ivf_flat.index. 2. 编译打包 这部分同上,不再展开介绍。 3. 配置 migration.ymal…

vue下载Excel文件

前端vue实现导出Excel文件 用到的是 上代码 var wb XLSX.utils.table_to_book(document.querySelector(#my-table));//关联dom节点 这个是表格绑定的id名称var wbout XLSX.write(wb, {bookType: xlsx,bookSST: true,type: array})try {FileSaver.saveAs(new Blob([wbout], {…

【教学类】公开课学号挂牌(15*15CM手工纸)

作品展示&#xff1a; 15*15CM手工纸 文本框12磅加粗。学号数字是段落写入&#xff0c;黑体270磅 背景需求 最近都在小班、中班、大班里做“Python学具测试”&#xff0c;由于都是陌生的孩子&#xff0c;上课时&#xff0c;我通常只能喊“白衣服的女孩”“花格子衣服的男孩”…

精华回顾:Web3 前沿创新者在 DESTINATION MOON 共话未来

9 月 17 日&#xff0c;由 TinTinLand 主办的「DESTINATION MOON: Web3 Dev Summit Shanghai 2023」线下活动在上海黄浦如约而至。 本次 DESTINATION MOON 活动作为 2023 上海区块链国际周的 Side Event&#xff0c;设立了 4 场主题演讲与 3 个圆桌讨论&#xff0c;聚集了诸多…

strtok()函数的使用方法

strtok() 函数用于将字符串分割成子字符串&#xff08;标记&#xff09;。它在 C 语言中非常常用&#xff0c;可以通过指定分隔符来拆分原始字符串&#xff0c;并依次返回每个子字符串。 以下是 strtok() 函数的使用方法&#xff1a; #include <stdio.h> #include <…

Python方法汇总:轻松实现功能!

在爬虫开发中&#xff0c;有时需要模拟登录网站以获取更多的数据或执行特定的操作。本文将为你总结几种常用的Python爬虫模拟登录方法&#xff0c;帮助你轻松实现登录功能&#xff0c;让你的爬虫更加强大有用。 一、基于Requests库的模拟登录 1. 使用Session对象&#xff1a;…

UOS Deepin Ubuntu Linux 开启 ssh 远程登录

UOS Deepin Ubuntu Linux 开启 ssh 远程登录 打开控制台 安装 openssh-server sudo apt -y install openssh-server修改 /etc/ssh/ssh_config 文件 sudo vim /etc/ssh/ssh_config找到 # Port 22 去掉 # 注释后 保存 重启 ssh 服务 sudo systemctl restart ssh设置 ssh 服务 开机…

ros开发中编译cpp文件的2个办法

方式一&#xff1a; 在Ubuntu控制台输入指令 cd catkin_ws 进入到工作空间 然后在输入&#xff1a; catkin_make --pkg catkin_practice 注释&#xff1a;以上catkin_ws是工作空间名称&#xff0c;catkin_practice是工作空间中将要被编译的包的名称 方式二&#xff1a; …

前端控制小数点精度及数字千位分割

前端控制小数点精度及数字千位分割&#xff0c;表头居中&#xff0c;每行单元格内容居右。 前端控制小数点精度&#xff1a; <el-table-column prop"cycz" label"差异产值" header-align"center" align"right"><template s…

JVM高级性能调试

标准的JVM是配置为了高吞吐量&#xff0c;吞吐量是为了科学计算和后台运行使用&#xff0c;而互联网商业应用&#xff0c;更多是为追求更短的响应时间&#xff0c;更低的延迟Latency&#xff08;说白了就是更快速度&#xff09;&#xff0c;当用户打开网页没有快速响应&#xf…

安卓机型-MTK芯片掉串码 掉基带 如何用工具进行修复 改写参数

在早期MTK芯片机型中较多使用AP BP方式来修复mtk芯片机型的串码。目前MTK机型对于丢基带 掉串码问题大都使用MODEM META工具来进行修复串码或者改写参数。今天以一款mtk芯片机型来做个演示&#xff0c; 高通芯片类的可以参考; 高通改串相关 工具仅支持在联发科芯片组上运行的…

WEB使用VUE3实现地图导航跳转

我们在用手机查看网页时可以通过传入经纬度去设置目的地然后跳转到对应的地图导航软件&#xff0c;如果没有下载软件则会跳转到下载界面 注意&#xff1a; 高德地图是一定会跳转到一个新网页然后去询问用户是否需要打开软件百度和腾讯地图是直接调用软件的这个方法有缺陷&…

iOS——引用计数(一)

自动引用计数 自动引用计数&#xff08;ARC&#xff0c;Automatic Reference Counting&#xff09;是指内存管理中对引用采取自动计数的技术。 满足以下要求后&#xff0c;我们的代码就无需再次键入retain或者是release代码了&#xff1a; 使用Xcode 4.2或以上版本使用LLVM编…

Android 启动优化案例:WebView非预期初始化排查

去年年底做启动优化时&#xff0c;有个比较好玩的 case 给大家分享下&#xff0c;希望大家能从我的分享里 get 到我在做一些问题排查修复时是怎么看上去又low又土又高效的。 1. 现象 在我们使用 Perfetto 进行app 启动过程性能观测时&#xff0c;在 UI 线程发现了一段 几十毫…