【C++STL基础入门】stack栈的增删查等操作的使用

news2024/11/30 0:39:50

文章目录

  • 前言
  • 一、stack元素访问
    • 1.1 元素访问之top
  • 二、stack修改
    • 2.1 stack修改之push()函数
    • 2.2 stack修改之pop()函数
    • 2.3 stack修改之swap()交换函数
    • 2.4 stack修改之emplace()在顶部原位构造元素
  • 总结


前言

在C++的标准模板库(STL)中,stack(栈)是一个容器适配器,它提供了一种后进先出(LIFO)的数据结构。栈是一种简单但常用的数据结构,它在很多场景中都有广泛的应用。本文将介绍stack的基本概念和常用操作,帮助初学者快速入门使用C++ STL中的stack。


一、stack元素访问

1.1 元素访问之top

原型:value_type& top()
功能:返回栈顶元素的引用,但不删除该元素。
参数:无。
返回值:返回栈顶元素的引用。
示例代码:

#include <iostream>
#include <stack>

int main() {
    std::stack<int> myStack;
    myStack.push(10);
    myStack.push(20);
    myStack.push(30);

    int topElement = myStack.top();
    std::cout << "Top element: " << topElement << std::endl;

    return 0;
}

在这里插入图片描述

输出:

Top element: 30

二、stack修改

2.1 stack修改之push()函数

原型:void push(const value_type& value)
功能:将元素压入栈顶。
参数:要压入栈顶的元素的值。
返回值:无。
示例代码:

#include <iostream>
#include <stack>

int main() {
    std::stack<int> myStack;

    myStack.push(10);
    myStack.push(20);
    myStack.push(30);

    std::cout << "Stack size after push operations: " << myStack.size() << std::endl;

    return 0;
}

在这里插入图片描述

输出:

Stack size after push operations: 3

函数用于将元素添加到容器的末尾。

2.2 stack修改之pop()函数

原型:void pop()
功能:弹出栈顶元素,即删除栈顶元素。
参数:无。
返回值:无。
示例代码:

#include <iostream>
#include <stack>

int main() {
    std::stack<int> myStack;
    myStack.push(10);
    myStack.push(20);
    myStack.push(30);

    myStack.pop();

    std::cout << "Stack size after pop operation: " << myStack.size() << std::endl;

    return 0;
}

在这里插入图片描述

输出:

Stack size after pop operation: 2

2.3 stack修改之swap()交换函数

原型:void swap(stack& other)
功能:交换两个栈的内容。
参数:另一个要交换的栈。
返回值:无。
示例代码:

#include <iostream>
#include <stack>

int main() {
    std::stack<int> stack1;
    stack1.push(10);
    stack1.push(20);
    stack1.push(30);

    std::stack<int> stack2;
    stack2.push(40);
    stack2.push(50);

    stack1.swap(stack2);

    std::cout << "Stack 1 size: " << stack1.size() << std::endl;
    std::cout << "Stack 2 size: " << stack2.size() << std::endl;

    return 0;
}

在这里插入图片描述

输出:

Stack 1 size: 2
Stack 2 size: 3

2.4 stack修改之emplace()在顶部原位构造元素

原型:template <class… Args> reference emplace(Args&&… args)
功能:在栈顶原位构造一个元素。
参数:要构造元素所需的参数。
返回值:对新构造元素的引用。
示例代码:

#include <iostream>
#include <stack>
#include <string>

int main() {
    std::stack<std::string> myStack;
    myStack.emplace("Hello");
    myStack.emplace("World!");

    std::cout << "Stack size: " << myStack.size() << std::endl;
    std::cout << "Top element: " << myStack.top() << std::endl;

    return 0;
}

在这里插入图片描述
它的目的是在容器中就地构造元素,而不是进行副本创建。

输出:

Stack size: 2
Top element: World!

总结

本文介绍了C++ STL中的stack栈的基本概念和常用操作。stack是一个容器适配器,提供了一种后进先出(LIFO)的数据结构,非常适用于需要快速访问最近添加的元素的场景。

通过使用头文件,我们可以轻松地创建一个栈对象,并通过一系列操作来管理栈中的元素。

首先,我们可以使用push(element)函数将元素添加到栈的顶部。这意味着新的元素成为了最顶部,而之前添加的元素则往下移动。

要从栈中移除栈顶元素,我们可以使用pop()函数。这会删除栈顶的元素,并使下面的元素成为新的栈顶。

通过使用top()函数,我们可以访问栈顶元素的值,而不会删除它。这对于需要查看栈顶元素但不改变栈的结构的情况非常有用。

我们还可以使用empty()函数来检查栈是否为空。如果栈为空,表示没有任何元素存在;如果栈不为空,意味着至少有一个元素存在。

要获取栈中元素的数量,我们可以使用size()函数。它返回栈中当前的元素数量,帮助我们了解栈的大小。

通过使用示例代码,我们演示了stack栈的基本操作。这个示例包括创建栈对象、添加元素、获取栈的大小、访问栈顶元素以及移除栈顶元素等操作。这有助于加深你对stack栈的理解并且可以用作参考。

通过学习本文中介绍的内容,你现在应该对C++ STL中的stack栈有了较详细的了解。你可以利用stack栈来实现后进先出的数据结构,并根据具体的需求进行相应的增删查等操作。

使用stack栈可以帮助我们更高效地管理数据,尤其在需要维护元素顺序并以最后添加的元素为主导的情况下,它是一个非常有用的工具。

希望本文对您学习C++ STL中的stack栈有所帮助。祝愉快学习!

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

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

相关文章

zabbix监控keepalived主备状态以及脑裂

zabbix监控keepalived主备状态以及脑裂 文章目录 zabbix监控keepalived主备状态以及脑裂环境说明&#xff1a;1.配置keepalived监控主备状态的脚本在master主机上编写脚本在slave主机上编写脚本 2.配置keepalived加入监控脚本的配置2.1.配置主keepalived配置文件2.2.配置备keep…

Godot C#连接信号不能像GDScirpt一样自动添加代码

前言 我网上找了好久&#xff0c;发现Godot 对于C# 的支持还有待增强 使用c#脚本有办法像gds那样连接节点自带信号时自动生成信号吗&#xff1f; 百度贴吧 Godot C# How To, Episode 9. Signals With Parameters | Godot Mono 解决方案 把信号拉长&#xff0c;看他的属性 修…

Python与JAVA有何区别?

多年来&#xff0c;程序员一直在寻找一种编程语言&#xff0c;使用这种编程语言&#xff0c;你只需编写一次应用程序&#xff0c;即可让它运行在多种平台之下。Java就是一种跨平台的编程语言&#xff0c;为此Java需要使用一些技巧&#xff0c;相关内容你会在本书后面了解到。而…

【Java 进阶篇】JavaScript DOM 编程:理解文档对象模型

在 web 开发中&#xff0c;DOM&#xff08;文档对象模型&#xff09;是一个重要的概念。DOM 是一种将网页文档表示为树状结构的方式&#xff0c;允许开发者使用 JavaScript 来访问和操作网页的内容。本篇博客将详细介绍 DOM&#xff0c;包括什么是 DOM、如何访问 DOM 元素、如何…

华为云云耀云服务器L实例评测|企业项目最佳实践之压测 (十一)

十二、云服务器压测&#xff1a; 服务器压测可以选择工具sysbench&#xff0c;它可以模拟几千个线程并发的访问实例。作为一款广泛使用的开源模块化的、跨平台、多线程基准测试工具&#xff0c;sysbench主要用于评估服务器系统在不同负载条件下的性能表现。 sysbench具有简单易…

PYTHON进阶-面向对象编程

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

基于Java的家电销售网站管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域…

C++位图和布隆过滤器

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容介绍C中的位图和布隆过滤器模拟实现和简单的应用 文章目录 …

求直角三角形第三点的坐标

文章目录 求直角三角形第三点的坐标1. 原理2. 数学公式3. 推导过程 求直角三角形第三点的坐标 1. 原理 已知内容有&#xff1a; P1、P2 两点的坐标&#xff1b; dis1 为 P1与P2两点之间的距离&#xff1b; dis2 为 P2与P3两点之间的距离&#xff1b; 求解&#xff1a; …

10、网络防火墙的设置

1、查看防火墙是否开启 systemctl status firewalld 此图表示防火墙已开启&#xff0c;如果未开启可使用systemctl start firewalld开启 2、查看已开启的端口 firewall-cmd --list-ports 默认无打开的端口 3、打开80端口 firewall-cmd --zonepublic --add-port80/tcp --p…

stm32备份

存储器的分类&#xff1a; 存储器首先根据断电后存储的数据是否会丢失&#xff0c;可以分为易失存储器和非易失存储器&#xff0c;易失存储器主要应用于内存&#xff0c;非易失存储器主要用于外存。 易失存储器以RAM随机存储器为代表&#xff0c;随机的含义是存储器中的数据读取…

EfficientDet: Scalable and Efficient Object Detection

CVPR2020 V7 Mon, 27 Jul 2020 引用量&#xff1a;243 机构&#xff1a;Google 贡献&#xff1a;1>提出了多尺度融合网络BiFPN 2>对backbone、feature network、box/class prediction network and resolution进行复合放缩&#xff0c;有着不同的…

Linux第4章-目录结构

引子 在Linux中&#xff0c;一切皆文件&#xff01;&#xff01;&#xff01; 在Linux中&#xff0c;一切皆文件&#xff01;&#xff01;&#xff01; 在Linux中&#xff0c;一切皆文件&#xff01;&#xff01;&#xff01; 基本介绍 1.Linux的文件系统&#xff0c;是采用…

LoRA 是如何工作的?

概述 纯笔记 LoRA的原理 LoRA其实是对稳定扩散模型最关键的部分进行了微小的改变。 这个关键的部分叫&#xff1a;cross-attention layers – 交叉注意力层。 研究人员发现&#xff0c;对这关键部分进行微调就足以实现良好的训练。 上面黄色部分&#xff0c;QKV 部分就是&a…

Python进阶之迭代器

文章目录 前言一、迭代器介绍及作用1.可迭代对象2. 迭代器 二、常用函数和迭代器1.常用函数2.迭代器 三、总结结束语 &#x1f482; 个人主页:风间琉璃&#x1f91f; 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注…

ELK 日志分析系统介绍与部署

目录 一、ELK 简介: 1.开源工具介绍&#xff1a; 2.其它组件&#xff1a; 2.1 Filebeat&#xff1a; 2.2 Fluentd&#xff1a; 2.3 缓存/消息队列&#xff08;redis、kafka、RabbitMQ等&#xff09;&#xff1a; 3. filebeat 结合 logstash 带来好处&#xff1a; 二、为什么要…

zookeeper源码学习笔记(一)

一、缘起 1、CP还是AP 作为一个在大数据行业工作了7&#xff5e;8年的老兵&#xff0c;在被问到zookeeper和CAP时&#xff0c;竟然有些恍惚&#xff0c;AP还是CP&#xff1f; 看了一些博文&#xff0c;答案几乎都是CP&#xff1f; zookeeper的实现中&#xff0c;P是一定的&…

【C语言】.c源文件从编译到链接生成可执行程序的过程

本篇文章目录 1. 过程概览2. 编译与链接2.1 预编译/预处理2.2 编译2.3 汇编2.4 链接 3. 执行/运行环境 1. 过程概览 编译到链接是c语言的翻译环境&#xff0c;c语言还有执行环境。 组成一个程序的每个源文件通过编译过程分别转换成目标代码&#xff08;object code&#xff09;…

推荐《一拳超人》

《一拳超人》是ONE原作&#xff0c;村田雄介作画&#xff0c;连载于网络漫画杂志《邻座的Young jump》上的漫画。 [1] 原为ONE在个人网站上连载的练笔之作&#xff0c; [2] 后被喜爱该作的另一漫画家村田雄介在征得ONE同意后重新绘制而成。 简体中文电子版由哔哩哔哩漫画发布…

JavaSE学习值之--认识异常

&#x1f495;"有效知识的前提是承认知识边界&#xff0c;承认我们对边界那边的一切无可奉告。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;JavaSE学习值之--认识异常 一.什么是异常&#xff1f; 异常就是程序在运行的时候产生的不正常的行为 …