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…

大数据项目实战之数据仓库:电商数据仓库系统——第10章 数仓开发之DWS层

文章目录 第10章 数仓开发之DWS层10.1 最近1日汇总表10.1.1 交易域用户商品粒度订单最近1日汇总表10.1.2 交易域用户商品粒度退单最近1日汇总表10.1.3 交易域用户粒度订单最近1日汇总表10.1.4 交易域用户粒度加购最近1日汇总表10.1.5 交易域用户粒度支付最近1日汇总表10.1.6 交…

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 服务 开机…

数据治理-科特的重大变革八步法

约翰科特是变革管理领域最受尊敬的研究者之一,他在《领导变革》一书中总结了组织执行变革遭遇失败的八大误区。对信息管理和数据管理环境下经常出现的问题具有参考意义。 误区 过于自满 组织变革时人们所犯的最大的错误,是尚未在同事和上级中建立足够高的紧迫感的情况下就冒…

Hoeffing不等式

在李航老师的统计学习方法&#xff08;第一版中&#xff09; H o e f f i n g 不等式 Hoeffing不等式 Hoeffing不等式是这样子给出的 设 X 1 , X 2 , . . . , X N X_1,X_2,...,X_N X1​,X2​,...,XN​是独立随机变量&#xff0c;且 X i ∈ [ a i , b i ] , i 1 , 2 , . . . ,…

servlet实现登录功能【当用户当前未登陆,跳转登录页面才能访问,若已经登录了,才可以直接访问】

1. 前端 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><form action"login" method"POST"><input type"text&q…

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

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

Java 基本数据类型

目录 Java 基本数据类型 内置数据类型 引用类型 Java常量 Java 基本数据类型 变量就是申请内存来存储值。也就是说&#xff0c;当创建变量的时候&#xff0c;需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间&#xff0c;分配的空间只能用来储存该类型…

获取唯一的短邀请码

/*** 获取唯一的邀请码** return the string*/private String generateUserUniqueShareCode() {Set<String> arr getSetArr();String code;do {code generateCode(arr);} while (isCodeUserExists(code));return code;}/*** Gets set arr.** return the set arr*/NotNu…