STL之stack 【栈】

STL之stack 【栈】

    • 头文件
    • 创建stack
    • 添加元素(插入元素)
    • 删除元素(弹出元素)
    • 访问元素
    • 检查栈是否为空:
    • 获取栈的大小
    • 遍历C++中stack
    • 用c语言实现栈

stack:栈,后进先出(LIFO)的数据结构。适用于需要在容器的末尾执行插入和删除操作的情况.

头文件

#include <stack>

创建stack

std::stack<int> myStack;  // 创建一个整数类型的栈

添加元素(插入元素)

myStack.push(42);
myStack.push(17);

删除元素(弹出元素)

myStack.pop();  // 弹出顶部元素

访问元素

使用 top 函数访问栈的顶部元素,但不会从栈中移除它:

int topElement = myStack.top();  // 访问栈顶部元素

检查栈是否为空:

if (myStack.empty()) {std::cout << "Stack is empty." << std::endl;
} else {std::cout << "Stack is not empty." << std::endl;
}

获取栈的大小

size_t stackSize = myStack.size();  // 获取栈的大小
#include <iostream>
#include <stack>int main() {std::stack<int> myStack;myStack.push(42);myStack.push(17);int topElement = myStack.top();std::cout << "Top element: " << topElement << std::endl;myStack.pop();if (myStack.empty()) {std::cout << "Stack is empty." << std::endl;} else {std::cout << "Stack is not empty." << std::endl;}return 0;
}

遍历C++中stack

在C++的STL中,std::stack并没有提供公开的迭代器接口,因此无法直接通过迭代器来遍历栈。实际上,std::stack设计为在特定情况下隐藏了其底层容器的实现细节,并且它的迭代器是被封装的,无法直接访问。如果你需要遍历栈中的元素,最好的方法是将栈的内容弹出到一个临时容器(如std::vectorstd::deque)中,然后使用该容器的迭代器进行遍历。

#include <iostream>
#include <stack>
#include <vector>int main() {std::stack<int> myStack;myStack.push(10);myStack.push(20);myStack.push(30);// 将栈中的元素弹出并存储到vector中std::vector<int> tempVector;while (!myStack.empty()) {tempVector.push_back(myStack.top());myStack.pop();}// 使用vector的迭代器从栈顶到栈底遍历std::cout << "Stack elements from top to bottom: ";for (auto it = tempVector.rbegin(); it != tempVector.rend(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}

用c语言实现栈

#include <stdio.h>
#include <stdlib.h>#define MAX_SIZE 100typedef struct {int arr[MAX_SIZE];int top;
} Stack;// 初始化栈
void initializeStack(Stack* stack) {stack->top = -1;
}// 判断栈是否为空
int isEmpty(Stack* stack) {return stack->top == -1;
}// 判断栈是否已满
int isFull(Stack* stack) {return stack->top == MAX_SIZE - 1;
}// 入栈操作
void push(Stack* stack, int value) {if (isFull(stack)) {printf("Stack overflow\n");return;}stack->arr[++(stack->top)] = value;
}// 出栈操作
int pop(Stack* stack) {if (isEmpty(stack)) {printf("Stack underflow\n");return -1; // 表示栈为空}return stack->arr[(stack->top)--];
}// 获取栈顶元素,不弹出
int peek(Stack* stack) {if (isEmpty(stack)) {printf("Stack is empty\n");return -1; // 表示栈为空}return stack->arr[stack->top];
}int main() {Stack myStack;initializeStack(&myStack);push(&myStack, 10);push(&myStack, 20);push(&myStack, 30);printf("Top element: %d\n", peek(&myStack));printf("Popped element: %d\n", pop(&myStack));printf("Popped element: %d\n", pop(&myStack));printf("Top element: %d\n", peek(&myStack));return 0;
}

那么stack的用法就讲到这里,下一章看multiset的用法。关注我,为大家持续分享更多的内容,让学习变得更简单,与君共勉,共同成长。

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

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

相关文章

每日一言正能量句子,心灵鸡汤之励志文案

1、相信自我是成功的基石&#xff0c;完善自我是成功的阶梯&#xff0c;突破自我是成功的钥匙&#xff0c;合谋共处是成功的翅膀&#xff0c;确立目标是成功的起点&#xff0c;付注行动是成功的号角&#xff01; 2、所有的努力&#xff0c;不是为了让别人觉得你了不起&#xf…

Modern C++ sizeof(std::tuple)的秘密

1. 前言 我们曾经至少三篇帖子或多或少的提到过std::tuple的原理及占用空间大小: Modern C++ std::tuple的sizeModern C++利用工具快速理解std::tuple的实现原理GDB调试技巧实战–自动化画出类关系图Modern C++ std::unique_ptr的实现原理但是,当初在第一篇中提出的size的问…

【INTEL(ALTERA)】错误:*.onchip_flash_0:UFM 扇区不支持“隐藏”模式。请更新访问模式设置

说明 由于英特尔 Quartus Prime Standard Edition 软件版本 22.1 存在一个问题&#xff0c;当您针对 10 FPGA Compact 变体英特尔 MAX在片上闪存英特尔 FPGA IP中选择单压缩映像配置模式时&#xff0c;可能会出现以下错误消息。 错误&#xff1a;*.onchip_flash_0&#xff1a…

C系列-自定义类型:结构体

&#x1f308;个人主页: 会编程的果子君 ​&#x1f4ab;个人格言:“成为自己未来的主人~” 结构体类型的声明 前面我们在学习操作符的时候&#xff0c;已经学习了结构体的知识&#xff0c;这里我们稍微复习一下。 结构体回顾 结构是一些值的集合&#xff0c;这些值称为成员…

【字节跳动】资深后端开发工程师-平台应用服务

资深后端开发工程师-平台应用服务 上海&#xff5c;正式&#xff5c;研发 - 后端职位&#xff5c;ID&#xff1a;A04493 职位描述 负责商业化基础服务系统能力建设&#xff0c;参与千亿级广告基础数据服务研发和优化&#xff0c;参与广告平台通用组件的设计和实现&#xff1b…

【linux】磁盘相关命令fdisk/lsblk和file

1. fdisk 磁盘分区&#xff0c;查看系统分区。 fdisk 的意思是 固定磁盘(Fixed Disk) 或 格式化磁盘(Format Disk)&#xff0c;它是命令行下允许用户对分区进行查看、创建、调整大小、删除、移动和复制的工具。它支持 MBR、Sun、SGI、BSD 分区表&#xff0c;但是它不支持 GUI…

Docker 数据管理、容器互联、网络与资源控制

一、docker数据管理 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷(Data volumes)和数据卷容器(Datavolumes containers)。 1、数据卷 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中。可将宿主机的目录挂载到数据卷上&#xff0c;对数据卷的修改操作立…

池化设计之数据库连接池

前言 一般数据库操作、主机操作等经常会涉及到会话&#xff0c;什么是会话&#xff0c;会话在日常生活中就是指两个人或者多个人直接的交流&#xff0c;同样的在IT行业会话一般是指客户端和服务端之间的通信交流。比如数据库&#xff0c;如果使用可视化界面做为客户端和数据库…

牛顿法与拟牛顿法

文章目录 牛顿法&拟牛顿法1 牛顿法2 拟牛顿法2.1 对称秩1校正2.2 DFP2.3 BFGS 牛顿法&拟牛顿法 设无约束优化问题&#xff1a; min ⁡ f ( x ) , x ∈ R n \min f(x),{\kern 1pt} \,x \in {R^n} minf(x),x∈Rn 1 牛顿法 基本思想&#xff0c;通过泰勒二阶展开&…

Prometheus 容器化部署

实验部署 工作中是基于kube-api的自动发现 1、创建账户绑定集群 kubectl create serviceaccount monitor -n monitor-sa #创建账户 kubectl create clusterrolebinding monitor-clusterrolebinding -n monitor-sa --clusterrolecluster-admin --serviceaccountmonitor-sa:…

FileViewer纯前端预览项目Vue2 demo

FileViewer 项目Vue2 demo 本demo基于vue-clijsvue2.x构建&#xff0c;如果您需要vue3版本的demo&#xff0c;请前往main分支。 适用于Vue2 Webpack&#xff0c;本集成方法要求最低Webpack版本为5&#xff0c;也就是Vue Cli Service 5.0.0以上&#xff0c;当然&#xff0c;if…

13.前端--CSS-盒子模型

1.盒子模型的组成 CSS 盒子模型本质上是一个盒子&#xff0c;封装周围的 HTML 元素&#xff0c;它包括&#xff1a;边框、外边距、内边距、和 实际内容 2.边框&#xff08;border&#xff09; 2.1 边框的使用 1、border设置元素的边框。边框有三部分组成:边框宽度(粗细) 边框…

国网四川宜宾供电公司:基于“RPA+AI”融合技术的电网设备隐患缺陷智能化识别应用

推荐单位&#xff1a;国网四川省电力公司宜宾供电公司 本文作者&#xff1a;杨鑫、唐龙、钟睿、李小航、孙雪冬 摘 要&#xff1a;为推进电力企业生产业务数字化转型&#xff0c;提高基层班组数字化运维水平。本文通过一线班组对变电站视频巡视、设备故障判断应用场景需求分析…

C++-内存管理(1)

1. C/C内存分布 首先我们需要知道&#xff0c;在C中的内存分为5个区。 1. 栈 又叫堆栈 -- 非静态局部变量 / 函数参数 / 返回值等等&#xff0c;栈是向下增长的。 2. 内存映射段 是高效的 I/O 映射方式&#xff0c;用于装载一个共享的动态内存库。用户可使用系统接口 创建…

【2023地理设计组一等奖】基于GIS的桥梁隧道三维建模与可视化

作品介绍 1 设计背景和意义 随着我国基础建设规模不断扩大和深入,构建桥梁可视化管理模型,全面推动智慧桥梁,已成为现代隧道桥梁建设行业的发展趋势。传统的桥梁建模工作需要复杂的算法设计并需要熟练编程实践技能,实现周期长。开发自主知识版权的桥梁建模软件系统或专用插…

在线mockjson

在线mockjson体验地址 在调一个问题的时候&#xff0c;但是问题的数据可能并不能随着想到的场景就变化&#xff0c;譬如说又个数组长度的情况&#xff0c;可能默认的情况下是返回4个元素&#xff0c;但是想要返回为空的时候&#xff0c;如果联系服务给改一下&#xff0c;那么流…

防火墙知识普及详解,使用TOR Router把TOR作为默认网关,增加隐私/匿名性

防火墙知识普及详解,使用TOR Router把TOR作为默认网关,增加隐私/匿名性。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具,支持研究学习,切勿用于非法犯罪活动,对于恶意使用该工具造成的损失,和本人及开发者…

Abp 从空白WebApplication开始

开发环境&#xff1a;VS2022、.NET6 1、创建项目&#xff1a;BasicAspNetCoreApplication 2、NuGet添加&#xff1a;Volo.Abp.AspNetCore.Mvc和Volo.Abp.Autofac&#xff0c;如下图所示&#xff1a; 3、开始写代码&#xff0c;目录如下图所示&#xff1a; 3.1、添加启动模块Ap…

使用make_grid多批次显示网格图像(使用CIFAR数据集介绍)

背景介绍 在机器学习的训练数据集中&#xff0c;我们经常使用多批次的训练来实现更好的训练效果&#xff0c;具体到cv领域&#xff0c;我们的训练数据集通常是[B,C,W,H]格式&#xff0c;其中&#xff0c;B是每个训练批次的大小&#xff0c;C是图片的通道数&#xff0c;如果是1…

接口请求,上传文件报500异常

异常响应 {"timestamp": "2024-01-29T06:39:28.82000:00","status": 500,"error": "Internal Server Error","path": "/test/upload" }服务端日志 服务端无日志打印 分析方向 nginx配置 nginx配置…