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

【STL】C++ stack(栈) 基本使用

目录

一 stack常见构造

1 空容器构造函数(默认构造函数)

2. 使用指定容器构造

3 拷贝构造函数

二 其他操作

1 empty

2 size

3 top

4 push && pop

5 emplace

6 swap

三 总结


一 stack常见构造

1 空容器构造函数(默认构造函数)

构造一个没有元素的空容器。

2. 使用指定容器构造

可以使用指定的底层容器来构造栈,默认是 std::deque,但也可以是 std::vectorstd::list

3 拷贝构造函数

构造一个容器,其中包含 x 中每个元素的副本,顺序相同

#include<stack>
#include<vector>
#include<iostream>
using namespace std;int main()
{stack<int> st1;vector<int> v{ 1, 2, 3, 4 };stack<int, vector<int>> st2(v);cout << " st2: " << st2.size() << endl;stack<int, vector<int>> st3(st2);cout << " st3: " << st3.size() << endl;stack<int> st4(st1);cout << " st4: " << st4.size() << endl;return 0;}

二 其他操作

1 empty

 返回容器是否为空(即其大小是否为 0)

void Test1()
{stack<int> st;if (st.empty()) cout << " st is empty" << endl;else cout << "st is not empty" << endl;
}

2 size

上面已经演示过了, 这里不说明了

3 top

返回栈顶元素

void Test2()
{vector<int> v{ 1, 2, 3, 4 };stack<int, vector<int>> st(v);cout << st.top() << endl;
}

4 push && pop

void push (const value_type& val);
void push (value_type&& val);
void pop();
void Test3()
{stack<int> st;st.push(1);st.push(2);st.push(3);while (!st.empty()){cout << st.top() << endl;st.pop();}}

5 emplace

 emplace 作用和 push 一样的, 只是效率不一样, 涉及到了右值引用问题, 后面再讲

void Test4()
{stack<string> st;st.emplace("first");st.emplace("second");while (!st.empty()){cout << st.top() << endl;st.pop();}
}

6 swap

交换两个容器的内容

void swap (stack& x)
void Test5()
{stack<int> st1, st2;st1.push(1);st1.push(2);cout << st1.size() << endl;st2.push(10);st2.push(20);st2.push(30);cout << st2.size() << endl;st1.swap(st2);cout << st1.size() << endl;cout << st2.size() << endl;
}

三 总结

这节栈的使用非常简单的, 感觉没有啥要讲的, 重要的是后面 栈的模拟实现还有和 队列联合使用. 对本节概念不清楚的, 可以看看我之前写的栈数据结构. 那里就很清晰了.

这两天成都一直下雨, 冷. 脑壳还有点晕, 最近学习Linux系统, 学到线程了, 早听说线程难, 没想到这么难.继续加油吧!

相关文章:

  • 你真的会使用Vue3的onMounted钩子函数吗?Vue3中onMounted的用法详解
  • Wpf 使用 Prism 实战开发Day28
  • 第三方软件测试机构进行验收测试的好处分享,需多少时间和费用?
  • python -【一】基础语法
  • 计算机字符编码的发展
  • 机器学习(五) -- 监督学习(4) -- 集成学习方法-随机森林
  • CSP垦田计划
  • 磁带存储:“不老的传说”依然在继续
  • 数据结构(八)二叉树、哈希查找
  • Codeforces Round 948 (Div. 2) E. Tensor(思维题-交互)
  • 【前端学习——react坑】useState使用
  • 【AI基础】数据获取与整理、打标、增强方法、增强库imgaug
  • 【Linux】初识Linux和Linux环境配置
  • uniapp一些问题解决
  • 【国产中颖】SH79F9202U单片机驱动LCD段码液晶学习笔记
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript创建对象的四种方式
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Xmanager 远程桌面 CentOS 7
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于HAProxy的高性能缓存服务器nuster
  • 力扣(LeetCode)965
  • 码农张的Bug人生 - 初来乍到
  • 驱动程序原理
  • 首页查询功能的一次实现过程
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 正则表达式小结
  • HanLP分词命名实体提取详解
  • postgresql行列转换函数
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Python) SOAP Web Service (HTTP POST)
  • (二)fiber的基本认识
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)LINQ之路
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)一些感悟
  • ./configure,make,make install的作用
  • .htaccess配置常用技巧
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net 后台导出excel ,word
  • .net6 webapi log4net完整配置使用流程
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET连接MongoDB数据库实例教程
  • .Net实现SCrypt Hash加密
  • @Bean有哪些属性
  • [1]-基于图搜索的路径规划基础
  • [20150629]简单的加密连接.txt
  • [AI Google] 使用 Gemini 取得更多成就:试用 1.5 Pro 和更多智能功能