当前位置: 首页 > news >正文

C++之STL整理(8)之stack用法(创建、赋值、增删查改)详解

C++之STL整理(8)之stack用法(创建、赋值、增删查改)详解

注:整理一些突然学到的C++知识,随时mark一下
例如:忘记的关键字用法,新关键字,新数据结构


C++ 的stack整理

  • C++之STL整理(8)之stack用法(创建、赋值、增删查改)详解
  • stack
    • 1. stack 构造函数
    • 1. stack构造函数
    • 2. stack赋值操作
    • 3. stack数据存取操作
    • 4. stack大小操作
  • 总结


提示:本文为 C++ 中 stack构造、赋值、接口 的写法和举例


stack

  stack(栈)是STL的一个容器适配器,它提供了后进先出(LIFO, Last In First Out)的栈数据结构。stack在内部通常使用deque或list或vector作为底层容器来存储元素,但stack只提供了访问栈顶元素的接口,隐藏了底层容器的其他功能。

1. stack 构造函数

下面将基于您提供的函数接口,详细解释stack的各个成员函数,并给出相应的例子。

1. stack构造函数

stack<T> stkT;:这是stack的默认构造函数,它会创建一个空的栈。

例子:

#include <stack>  
#include <iostream>  int main() {  std::stack<int> stkInt; // 创建一个空的int类型的栈  return 0;  
}

stack(const stack &stk);:这是拷贝构造函数,用于创建一个新栈,它是现有栈的副本。

#include <stack>  
#include <iostream>  int main() {  std::stack<int> stk1;  stk1.push(1);  stk1.push(2);  std::stack<int> stk2(stk1); // 创建一个stk1的副本stk2  std::cout << stk2.top() << std::endl; // 输出2  return 0;  
}

2. stack赋值操作

stack& operator=(const stack &stk);:这是赋值操作符的重载,用于将一个栈的内容赋给另一个栈。

#include <stack>  
#include <iostream>  int main() {  std::stack<int> stk1;  stk1.push(1);  stk1.push(2);  std::stack<int> stk2;  stk2 = stk1; // 将stk1的内容赋给stk2  std::cout << stk2.top() << std::endl; // 输出2  return 0;  
}

3. stack数据存取操作

push(elem);:将元素elem压入栈顶。

例子:

#include <stack>  
#include <iostream>  int main() {  std::stack<int> stk;  stk.push(1); // 压入1  stk.push(2); // 压入2  return 0;  
}

pop();:移除栈顶的元素。

#include <stack>  
#include <iostream>  int main() {  std::stack<int> stk;  stk.push(1);  stk.push(2);  stk.pop(); // 移除2  std::cout << stk.top() << std::endl; // 输出1  return 0;  
}

top();:返回栈顶元素的引用,但不移除它。

#include <stack>  
#include <iostream>  int main() {  std::stack<int> stk;  stk.push(1);  stk.push(2);  std::cout << stk.top() << std::endl; // 输出2  return 0;  
}

4. stack大小操作

empty();:检查栈是否为空,如果为空则返回true,否则返回false。

#include <stack>  
#include <iostream>  int main() {  std::stack<int> stk;  std::cout << (stk.empty() ? "Empty" : "Not Empty") << std::endl; // 输出Empty  stk.push(1);  std::cout << (stk.empty() ? "Empty" : "Not Empty") << std::endl; // 输出Not Empty  return 0;  
}

size();:这个函数返回栈中当前元素的个数。

#include <stack>  
#include <iostream>  int main() {  std::stack<int> stk;  stk.push(1);  stk.push(2);  stk.push(3);  std::cout << "Size of stack: " << stk.size() << std::endl; // 输出3  stk.pop();  std::cout << "Size after popping: " << stk.size() << std::endl; // 输出2  return 0;  
}

注意事项
stack容器提供了基本的后进先出(LIFO)操作,但不提供直接访问栈中除栈顶之外元素的方法。即只能访问栈顶部。
当你需要遍历栈的内容时,通常需要将元素逐个弹出并处理,或者使用一个额外的容器来复制栈的内容。
stack的底层实现通常依赖于deque,但你也可以指定其他的底层容器类型,比如list或vector,通过模板参数来实现。
总结
stack是STL中一个简单但非常有用的容器适配器,它提供了一组基本操作来管理后进先出的数据结构。通过使用这些操作,你可以轻松地实现一些常见的算法和数据结构问题。尽管stack的接口相对简单,但它却非常灵活,可以适应各种应用场景。

总结

相关文章:

  • 【Android】【root remount】【2】如何判断设备是否remount
  • 接口自动化测试(python+pytest+requests)
  • 工业视觉AI应用总结记录
  • AI日报:GPT-4-Turbo正式版自带读图能力;Gemini1.5Pro开放API;SD3将于4月中旬发布;抖音宫崎骏AI特效爆火
  • String类(1)
  • 动手学习深度学习(李沐)
  • Java项目:基于SSM+vue框架实现的人力资源管理系统设计与实现(源码+数据库+毕业论文+任务书)
  • 前端使用minio传输文件
  • Java Set基础篇
  • Linux(CentOS7)安装 Docker 以及 Docker 基本使用教程
  • 在unbuntu服务器上使用nginx+uwsgi部署django项目
  • 领鸡蛋游戏养鸡游戏淘宝客源码广告联盟
  • 活动预告|NineData 创始人CEO叶正盛将参加QCon全球软件开发大会,共话AI大模型技术在数据库DevOps的实践
  • docker 安装redis报错:can not init background jbos
  • Golang | Leetcode Golang题解之第18题四数之和
  • [NodeJS] 关于Buffer
  • 【前端学习】-粗谈选择器
  • 4. 路由到控制器 - Laravel从零开始教程
  • Android 架构优化~MVP 架构改造
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • idea + plantuml 画流程图
  • JavaScript创建对象的四种方式
  • js如何打印object对象
  • Just for fun——迅速写完快速排序
  • miaov-React 最佳入门
  • python docx文档转html页面
  • Rancher-k8s加速安装文档
  • V4L2视频输入框架概述
  • webpack4 一点通
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 规范化安全开发 KOA 手脚架
  • 简单实现一个textarea自适应高度
  • 前端js -- this指向总结。
  • 嵌入式文件系统
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 收藏好这篇,别再只说“数据劫持”了
  • 数据仓库的几种建模方法
  • 如何用纯 CSS 创作一个货车 loader
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #ifdef 的技巧用法
  • $refs 、$nextTic、动态组件、name的使用
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (过滤器)Filter和(监听器)listener
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (七)Knockout 创建自定义绑定
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)德国人的记事本
  • (转)可以带来幸福的一本书
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET Reactor简单使用教程