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

news2025/1/11 10:11:32

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

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

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

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

欢迎关注Android系统攻城狮

1.前言

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

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(): 将当前的栈与另一个栈进行交换。交换后,两个栈中的元素也会互相交换。

2.应用实例

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;
}

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;
}

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;
}

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;
}

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;
}

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

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

相关文章

Bootstrap 框架学习笔记(基础)

来自于 Twitter&#xff0c;基于 HTML、CSS、JavaScript。 有关网站&#xff1a;Bootstrap中文网Bootstrap是Twitter推出的一个用于前端开发的开源工具包。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发&#xff0c;是一个CSS/HTML框架。目前&#xff0c;Bootstrap最…

JVM面试题-类加载顺序、双亲委派、类初始化顺序(详解)

类加载器 JVM只会运行二进制文件&#xff0c;类加载器的作用就是将字节码文件加载到JVM中&#xff0c;从而让Java程序能够启动起来。 类加载负责执行类加载&#xff0c;去磁盘进行识别&#xff0c;识别完后加载到内存 类加载器的种类&#xff1a; 从上往下 启动类加载器&…

Unity的配置文件在安卓路径下使用的方法

Unity的配置文件在安卓路径下使用的方法 前言 之前我做过的很多使用配置文件的Unity项目&#xff0c;后面的有些项目也有在安卓路径下读取json文件的需求。这几天有个需求是获取在安卓路径下配置文件里的数据&#xff0c;我在网上查了一些案例&#xff0c;简单实现了这个需求…

swift 约束布局

添加约束布局 背景图瀑全屏 如何三等分 外面view容器没有约束

Laravel Swagger 使用完整教程

Swagger 使用 一、Swagger 基础1、 什么是Swagger2、 安装过程1 、composer安装2、添加服务提供者&#xff0c;引导框架运行时加载&#xff0c;在 app 配置文件&#xff0c;providers 选项中添加(laravel 5以上忽略此步骤)3、配置完成后&#xff0c;通过输入命令 **php artisan…

QT记事本+登陆界面的简单实现

主体头文件 #ifndef JSB_H #define JSB_H#include <QMainWindow> #include <QMenuBar>//菜单栏 #include <QToolBar>//工具栏 #include <QStatusBar>//状态栏 #include <QTextEdit>//文本 #include <QLabel>//标签 #include <QDebug&g…

什么样的应用程序适合使用Flutter开发桌面?

桌面应用开发的现状 在过去&#xff0c;桌面应用程序的开发通常需要使用特定于操作系统的工具和语言&#xff0c;如C、C#、Java等。这导致了高昂的开发成本和维护困难。尽管有一些跨平台桌面开发工具&#xff0c;如Electron和Qt&#xff0c;但它们在性能、用户体验和开发效率方…

Linus Torvalds接受来自微软的Linux Hyper-V升级

微软最近推送了一些变更&#xff0c;旨在改进即将发布的 Linux 内核 6.6 版本对 Hyper-V 的支持。这些改进包括在 Hyper-V 上支持 AMD SEV-SNP guest 和 Intel TDX guest。除了这两项&#xff0c;还有其他一些升级&#xff0c;如改进了 VMBus 驱动程序中的 ACPI&#xff08;高级…

阿里云产品试用系列-负载均衡 SLB

阿里云负载均衡&#xff08;Server Load Balancer&#xff0c;简称SLB&#xff09;是云原生时代应用高可用的基本要素。通过将流量分发到不同的后端服务来扩展应用系统的服务吞吐能力&#xff0c;消除单点故障并提升应用系统的可用性。阿里云SLB包含面向4层的网络型负载均衡NLB…

Flink TaskManger 内存计算实战

Flink TaskManager内存计算图 计算实例 案例一、假设Task Process内存4GB。 taskmanager.memory.process.size4096m 先排减JVM内存。 JVM Metaspace 固定内存 256mJVM Overhead 固定比例 process * 0.1 4096 * 0.1 410m 得到 Total Flink Memory 4096-256-410 3430m 计…

Palantir的“英伟达时刻”即将到来

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结 &#xff08;1&#xff09;由于投资者对生成式人工智能的兴趣持续增加&#xff0c;Palantir的股价一直在上涨。 &#xff08;2&#xff09;Palantir已经连续三个季度实现了GAAP盈利&#xff0c;并将很快有资格被纳入标…

接口幂等性最佳实践--redis+注解

文章目录 一、概念二、常见解决方案三、本文实现四、实现思路五、项目简介六、代码实现1.pom2.JedisUtil3.自定义注解ApiIdempotent4.ApiIdempotentInterceptor拦截器5.TokenServiceImpl6.TestApplication 七、测试验证1.获取token的控制器TokenController2.TestController, 注…

Postman应用——Headers请求头设置

文章目录 Header设置Header删除或禁用Header批量编辑Header预设添加 一般在接口需要校验签名时&#xff0c;Headers请求头用来携带签名和生成签名需要的参数&#xff0c;在Postman也可以设置请求头在接口请求时携带参数。 Header设置 说明&#xff1a; Key&#xff1a;Header…

睿趣科技:新手商家如何做好抖音店铺

抖音&#xff0c;作为全球热门的社交媒体平台之一&#xff0c;不仅仅是分享有趣视频的地方&#xff0c;也是许多商家拓展业务的黄金平台。对于新手商家来说&#xff0c;如何在抖音上建立一个成功的店铺是一项重要的任务。以下是一些关于如何做好抖音店铺的建议。 明确你的目标和…

STM32实现PMBus从机程序

最近在野火的STM32F103VET6开发板上实现PMBus从机程序&#xff0c;这个程序参考了以下这篇博客的关于使用中断法实现I2C从机程序&#xff1a;STM32设置为I2C从机模式_iic从机_柒壹漆的博客-CSDN博客 &#xff0c;实测这个程序是可以正常运行的&#xff0c;感谢博主的分享&#…

Flink 类型机制 及 Stream API和Table API类型推断和转换

注&#xff1a;本文使用flink 版本是0.13 一、类型体系 Flink 有两大API &#xff08;1&#xff09;stream API 和 &#xff08;2&#xff09;Table API ,分别对应TypeInformation 和 DataType类型体系。 1.1 TypeInformation系统 TypeInformation系统是使用Stream一定会用…

【Linux】:Kafka组件介绍

目录 环境简介 一、消息 二、主题 三、分区 四、副本 五、生产者 六、消费者 七、消费者组 八、offsets【偏移量】 环境简介 Linux内核&#xff1a;Centos7 Kafka版本&#xff1a;3.5.1 执行命令的目录位置&#xff1a;Kafka安装目录的bin目录下&#xff1a;/usr/loca…

uvm源码解读-sequence,sequencer,driver三者之间的握手关系1

1.start item 1.start_item();sequencer.wait_for_grant(prior);this.pre_do(1);需要指出&#xff0c;这里明确说明了wait_for_grant和send_request之间不能有任何延迟&#xff0c;所以在mid_do这个任务里千万不能有任何延迟。 task uvm_sequencer_base::wait_for_grant(uvm…

MySQL进阶篇2-索引的创建和使用

索引 mkdir mysql tar -xvf mysqlxxxxx.tar -c myql cd mysql rpm -ivh .....rpm yum install openssl-develsystemctl start mysqldgerp temporary password /var/log/mysqld.logmysql -u root -p mysql> show variables like validate_password.% set global validate_…

maven本地安装jar包

在实际开发中&#xff0c;有些jar包不能通过公共库下载&#xff0c;只能本地安装。可以按照以下步骤操作&#xff1a; 1、安装命令&#xff1a; mvn install:install-file -DgroupIdcom.chinacreator.sm -DartifactIdfbm-sm-common -Dversion0.0.1 -Dpackagingjar -Dfile../n…