C++容器——stack

news2025/1/17 2:57:05

stack容器

C++的std::stack容器是一个基于适配器模板类实现的容器适配器,它提供了一种后进先出的数据结构,即栈。


特点:

1.后进先出:元素在栈容器中按照后进先出的顺序管理,最后放入的元素将会最先被取出。

2.只能从栈顶操作:stack容器只允许在栈顶进行插入和删除操作,不能在中间或底部插入或删除元素。

3.功能简单:stack容器提供的操作相对简单,只包括推入元素、弹出元素、访问栈顶元素等基本操作。

4.不支持迭代器:stack不提供迭代器接口,因此不能像序列容器(如vector和deque)那样通过迭代器进行元素访问。

5.固定大小:stack容器没有固定的大小限制,但在底层实现上可能会有一定的容量限制,需要根据需求选择合适的实现方式。

6.没有排序功能:stack容器并不对元素进行排序,元素按照插入的顺序保持在栈中。


stack容器的使用 

  1. 加入头文件<stack>
  2. stack容器定义
  3. stack容器使用 

加入头文件 

#include<stack>

 定义无需初始化

在使用std::stack容器时,不需要显式指定容器的大小。当向std::stack中压入元素时,如果底层容器的大小不够,它会自动调整大小来适应新增的元素。这种自动调整大小的特性使得使用std::stack容器更加方便和灵活。

#include <iostream>
#include <stack>

int main() 
{
    std::stack<int> first;
    return 0;
}

使用

压栈(push):使用push()函数向栈顶添加元素。

弹栈(pop):使用pop()函数移除栈顶元素,无返回值。

访问栈顶(top):使用top()函数访问但不移除栈顶元素。注意,如果栈为空,调用top()是未定义行为 

empty():检查栈是否为空,返回布尔值。

size():返回栈中元素的数量。

#include <iostream>
#include <stack>

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

    // 压栈(Push)
    in.push(10);
    in.push(20);
    in.push(30);

    // 访问栈顶(top)
    std::cout << "栈顶元素:" << in.top() << std::endl;

    // 弹栈(pop)
    in.pop(); // 移除栈顶元素
    std::cout << "弹栈后的栈顶元素:" << in.top() << std::endl;

    // 输出栈中的元素
    std::cout << "栈中的元素:";
    while (!in.empty()) 
    {
        std::cout << in.top() << " ";
        in.pop(); // 移除栈顶元素
    }
    std::cout << std::endl;

    return 0;
}

//输出结果是
栈顶元素:30
弹栈后的栈顶元素:20
栈中的元素:20 10

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

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

相关文章

《Decoupled Optimisation for Long-Tailed Visual Recognition》阅读笔记

论文标题 《Decoupled Optimisation for Long-Tailed Visual Recognition》 长尾视觉识别的解耦优化 作者 Cong Cong、Shiyu Xuan、Sidong Liu、Shiliang Zhang、Maurice Pagnucco 和 Yang Song、 来自新南威尔士大学计算机科学与工程学院、北京大学计算机学院多媒体信息处…

在Flask中使用Celery完成异步和定时任务(Flask、Celery、Redis)

编程目标 通过使用Flask和Celery&#xff0c;实现一个简单的Web应用程序&#xff0c;能够接收HTTP POST请求&#xff0c;并异步发送电子邮件。 说明 使用Flask创建一个简单的Web应用程序&#xff0c;包含一个HTTP POST路由&#xff0c;用于接收发送电子邮件的请求。使用Cele…

特征提取与深度神经网络(角点检测)

图像特征概述 图像特征表示是该图像唯一的表述&#xff0c;是图像的DNA HOG HOG &#xff08;Histogram of Oriented Gradients&#xff09;是一种用于目标检测的特征描述子。在行人检测中用的最多。HOG特征描述了图像中局部区域的梯度方向信息&#xff0c;通过计算图像中各个…

HTML5 Canvas发光Loading动画特效源码

源码介绍 之前我们分享过很多基于CSS3的Loading动画效果&#xff0c;相信大家都很喜欢。今天我们要来分享一款基于HTML5 Canvas的发光Loading加载动画特效。Loading旋转图标是在canvas画布上绘制的&#xff0c;整个loading动画是发光3D的视觉效果&#xff0c;HTML5非常强大。 …

【Linux】传输文件,补充:VMware中Linux系统无法连接网络的解决方法

Linux系统可以和其他系统之间进行传输文件&#xff0c;只要通过ssh连接成功以后&#xff0c;就能进行文件传输。 Linux系统也可以通过URL规则和网页之间进行传输文件&#xff08;即上传/下载&#xff09;。 1、Linux系统之间传输文件&#xff1a;scp centos7自带ssh服务&…

Nvidia发布Llama3-ChatQA-1.5: 提升对话问答和表格推理能力,平均性能超越GPT-4

前言 近日&#xff0c;Nvidia推出了一款名为Llama3-ChatQA-1.5的对话问答模型。该模型在对话式问答和检索增强型生成等能力方面表现出色&#xff0c;在综合评测指标上甚至超越了当前业界顶尖的GPT-4模型。 技术特点 Llama3-ChatQA-1.5是基于Llama-3基础模型训练而成的。相比之…

如何判断nat网络?如何内网穿透

大家都清楚&#xff0c;如果你想开车&#xff0c;就必须要给车上一个牌照&#xff0c;随着车辆越来越多&#xff0c;为了缓解拥堵&#xff0c;就需要摇号&#xff0c;随着摇号的人数越来越多&#xff0c;车牌对于想开车的人来说已经成为奢望。在如今的IPv4时代&#xff0c;我们…

HarmonyOS NEXT星河版之美团外卖点餐功能实战(中)

接上 一、UI布局 1.1 购物车Item Preview Component export struct MTCartItemView {build() {Row({ space: 6 }) {Image(https://bkimg.cdn.bcebos.com/pic/4d086e061d950a7bc94a331704d162d9f3d3c9e2).width(42).aspectRatio(1).borderRadius(5)Column({ space: 3 }) {Text…

Git之revert的使用

问题场景&#xff1a; 提交代码都是以merge request的形式合并到主分支master的。 由于有一个merge request被误merge了&#xff0c;这期间又有同时merge了其它内容。 如何快速将这个被误merge的request从master上revert呢&#xff1f; 实例演示&#xff1a; 下面是最近的5…

【数学建模】天然肠衣搭配问题衍生问题/线性规划限制条件建立问题

线性规划限制条件建立问题 前景回顾/提出问题回顾1回顾2/问题提出解决前提 解决方法坐标轴(区间)法总结 前景回顾/提出问题 回顾1 首先回顾一下DVD在线租赁问题 在 question2中&#xff0c;需要保证每个人都不会收到自己不喜欢的DVD&#xff0c;即客户在线订单数为0时候&…

力扣每日一题-统计已测试设备-2024.5.10

力扣题目&#xff1a;统计已测试设备 题目链接: 2960.统计已测试设备 题目描述 代码思路 根据题目内容&#xff0c;第一感是根据题目模拟整个过程&#xff0c;在每一步中修改所有设备的电量百分比。但稍加思索&#xff0c;发现可以利用已测试设备的数量作为需要减少的设备电…

硬性清空缓存的方法

前端发布代码后&#xff0c;我们是需要刷新页面再验证的。有时候仅仅f5 或者ctrlshiftdelete快捷键仍然有历史缓存&#xff0c;这时可以通过下面的方法硬性清空缓存。 以谷歌浏览器为例&#xff0c;打开f12&#xff0c;右键点击刷新按钮&#xff0c;选择【清空缓存并硬性加载】…

STL算法移动范围:简单、高效的集合移动方法

STL算法移动范围 一、简介二、批量移动集合中的多个元素2.1、std::copy2.2、std::move2.3、std::swap_ranges 三、在一个范围内变换子范围3.1、std::copy_backward 向前复制3.2、元素倒退3.3、交换子范围 四、这一切太复杂了五、总结 一、简介 已经介绍过使用STL算法在范围&am…

微信小程序miniprogram_npm目录主包太大如何处理

在使用TDesign开发小程序&#xff0c;miniprogram_npm目录下很多组件&#xff0c;感觉很多组件我都没引用&#xff0c;为什么都在主包来&#xff0c;导致主包很大。如何优化&#xff1f; 在使用npm构建后生成的miniprogram_npm目录里&#xff0c;有所有TDesign组件。但是有很…

视频剪辑批量转码技巧:如何将MP4视频快速转换为MP3音频的方法

在视频剪辑和音频处理的领域中&#xff0c;经常需要将视频文件转换为音频文件&#xff0c;特别是将MP4视频转换为MP3音频。这样的转换不仅可以减少文件大小&#xff0c;方便传输和存储&#xff0c;还可以在不损失音频质量的情况下&#xff0c;方便在各种设备上播放。下面&#…

【AI基础】第一步:安装python开发环境-conda篇

上一篇讲解了朴素的开发环境安装 - 【AI基础】第一步&#xff1a;安装python开发环境-windows篇-CSDN博客&#xff0c;这里讲解通过conda来配置python环境&#xff0c;同时安装python开发工具pycharm&#xff0c;最终输出python版本的helloworld。 一、安装miniconda 1.1 下载…

计算机系列之结构化开发方法

23、结构化开发方法 1、系统分析与设计概述 ◆系统分析过程一般按如图所示的逻辑进行&#xff1a; (1)认识、理解当前的现实环境&#xff0c;获得当前系统的“物理模型“ (2)从当前系统的“物理模型“抽象出当前系统的“逻辑模型“ (3)对当前系统的“逻辑模型”进行分析和…

Pycharm2024版,更换安装源

1、选择Python Packages 2、点击图中的小齿轮 3、点击 号 4、添加源地址 常用源如下&#xff1a; 清华&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple 阿里云&#xff1a;http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn…

测试docker GPU性能损失

NVIDIA 3090 利用HSOpticalFlow代码测试docker GPU性能损失 docker介绍图如下&#xff1a; 形象生动展示了他们之间的关系 今天要测试docker容器运行HSOpticalFlow算法的性能损失&#xff0c;包括CPU和GPU 上一篇博客 http://t.csdnimg.cn/YW5kE 我已经介绍了使用docker和nvid…