C++ STL stack 用法
Stack(栈)是一种后进先出的数据结构,也就是LIFO(last in first out) ,最后加入栈的元素将最先被取出来,在栈的同一端进行数据的插入与取出,这一段叫做“栈顶”。
使用STL的stack需要include一个头文件<stack>
构造
template <class T, class Container = deque<T> > class stack;
如上,这对尖括号中有两个参数,第一个是T,表示栈中存放的数据的类型,比如int,double,或者结构体之类。
第二个参数指明底层实现的容器类型,也就是指明这个栈的内部实现方式,比如vector,deque,list。如果不指明它,默认使用deque(双端队列)。当然一般情况下不需要指定这一项参数。
直接看栗子、
// 构造 stacks
#include <iostream>
#include <stack> // 使用栈stack
#include <vector> // vector
#include <deque> // deque
using namespace std; int main ()
{
stack<int> first; //构造一个用于存放int类型的空栈(默认底层容器为deque),size=0。这是最简单也是最常用的方式 ٩(๑❛ᴗ❛๑)۶如果感觉别的方式太复杂,会用这一种就行 deque<int> mydeque (,); //构造一个包含3个int元素的双端队列
stack<int> second (mydeque); //用自己的双端队列构造一个栈(size=3) stack<int,vector<int> > third; //指明用vector实现一个栈(存放int),空栈size=0 vector<int> myvector (,); //构造一个存放2个元素的vector
stack<int,vector<int> > fourth (myvector); //用自己的vector构造一个栈,size=2 //输出四个栈的大小
cout << "size of first: " << first.size() << endl;
cout << "size of second: " << second.size() << endl;
cout << "size of third: " << third.size() << endl;
cout << "size of fourth: " << fourth.size() << endl; return ;
}
输出结果:
size of first:
size of second:
size of third:
size of fourth:
成员函数
先说一些常用的,直接看栗子୧(๑•̀⌄•́๑)૭
#include <iostream>
#include <stack>
using namespace std; int main ()
{
stack<int> mystack; for (int i=; i<; ++i) mystack.push(i); //push函数将参数元素加入栈中,没有返回值(例如这里循环将0,1,2,3,4加入栈中,注意栈顶元素是4)
cout << "size: " << mystack.size() << endl; //size函数返回栈的大小(此时有5个元素,size=5) while (!mystack.empty()) //empty函数返回一个bool值,栈为空时返回true,否则返回false
{
cout << ' ' << mystack.top(); //top函数的返回值是栈顶元素(注意并没有删掉栈顶元素)
mystack.pop(); //pop函数将栈顶元素删掉,没有返回值
}
cout << endl; return ;
}
运行结果:
size:
再来看另一组栗子:
#include <iostream>
#include <stack>
using namespace std; struct Node {
int a,b;
Node (int x, int y) {
a = x; b = y;
}
}; int main ()
{
stack<Node> mystack;
mystack.emplace(,); //emplace函数可以将一个元素加入栈中,与push的区别在于:emplace可以直接传入Node的构造函数的参数,并将构造的元素加入栈中
//mystack.push(1,2); //编译不通过,要达到上面的效果需要手动构造,例如mystack.push(Node(1,2));
Node p = mystack.top();
cout << p.a << " " << p.b << endl; stack<Node> my2;
my2.swap(mystack); //swap函数可以交换两个栈的元素
cout << mystack.size() << " " << my2.size() << endl; return ;
}
运行结果:
以上就是stack的常规操作
C++ STL stack 用法的更多相关文章
- stl stack用法
栈后进先出 #include<iostream> #include<algorithm> #include<cstdio> #include<stack> ...
- 浅谈C++ STL stack 容器
浅谈C++ STL stack 容器 本篇随笔简单介绍一下\(C++STL\)中\(stack\)容器的使用方法和常见的使用技巧. stack容器的概念 \(stack\)在英文中是栈的意思.栈是一种 ...
- C++ 标准模板库(STL)-stack
主要介绍一下C++11版本中标准模板库中栈的用法,希望可以帮到需要用的人. #include <iostream> #include <stack> #include < ...
- STL vector用法介绍
STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...
- STL stack 容器
STL stack 容器 Stack简介 stack是堆栈容器,是一种“先进后出”的容器. stack是简单地装饰deque容器而成为另外的一种容器. #include <s ...
- STL stack 常见用法详解
<算法笔记>学习笔记 stack 常见用法详解 stack翻译为栈,是STL中实现的一个后进先出的容器.' 1.stack的定义 //要使用stack,应先添加头文件#include &l ...
- STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map
list vector deque stack queue priority_queue set [unordered_set] map [unordered_map] multimap [uno ...
- C++ STL容器——stack用法介绍
stack是一种容器适配器,专门设计用于在LIFO上下文中操作(后进先出),其中元素仅从容器的一端插入和删除. 容器适配器,而不是一种容器. 它是容器适配器是指,只要支持一系列方法的容器(empty, ...
- 日常笔记6C++标准模板库(STL)用法介绍实例
一.vector常见用法详解 vector翻译为向量,但是这里翻译成变长数组的叫法更好理解. 如果typename是一个STL容器,定义的时候要记得在>>符号之间加上空格,因为在C++11 ...
随机推荐
- Android的Launcher启动流程 “Launcher部分启动流程”
研究代码从:AndroidManifest.xml.自定义的Application.java开始. Android系统启动时,系统需要一个Home应用程序来负责将这些应用程序展示出来:也就是该应用的目 ...
- swift中单例类的创建
1.最经典的 class TheOneAndOnlyKraken { static let sharedInstance = TheOneAndOnlyKraken() private ...
- (91)Wangdao.com第二十四天_Mutation Observer API 突变监视器
Mutation Observer API 突变监视接口 用来监视 DOM 变动. DOM 的任何变动,比如节点的增减.属性的变动.文本内容的变动,这个 API 都可以得到通知 概念上,它很接近事件, ...
- php基础--来自网页转载
注意:1.网页文件放在wamp中的www文件下:2.www文件下不能出现中文:网页浏览的方法:1.没有建立站点:localhost/文件所在位置2.建立站点:(1)站点-新建站点-打开对话框 (2)修 ...
- 19.3.20 解决pycharm快捷键无法使用问题和熟悉git与码云操作流程
problem:由于Vim插件导致快捷键无法使用: answer:settings→Plugins→搜索到ideaVim→取消选中→apply→重启pycharm: git:创建仓库→生成公钥(ssh ...
- Python函数部分(1)
之前,我们编代码时程序遵循的原则是:根据逻辑从上至下实现功能,其往往用一大段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处.这种方式虽然可以应付一般性 ...
- 虚拟机下hadoop1.1.2安装(单机版)与(集群版)
(1)我的电脑环境 CentOS6.5,64位,在虚拟机下实现. (2)jdk1.6的安装 jdk我用的是1.6.0_27,自己在网上下载jdk-6u27-linux-x64.zip 先在/usr/l ...
- springboot+rediscluster
@EnableCaching @Configuration public class RedisConfiguration extends CachingConfigurerSupport { @Au ...
- flask读书笔记
学习flask的一个很好的网站:http://www.pythondoc.com/flask-mega-tutorial/helloworld.html ======================= ...
- synchronized和Lock复习
刚学编程的时候,不懂得同步的概念,只认为程序按照自己写的顺序执行, 直到学到多线程,但当时理解同步问题,也只是面对临界资源需要加锁去控制, 解决一些,如生产消费的问题.但当时一直没考虑过,多线程的情况 ...