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 ...
随机推荐
- vs 2012 智能提示后为何不能 直接按enter键把提示的内容输入
这个是VS的"建议完成模式"和"标准模式",两者间切换按快捷键:Ctrl+Alt+空格键
- jcmd命令使用
概述 在JDK 1.7之后,新增了一个命令行工具jcmd. 它是一个多功能工具,能够用来导出堆,查看java进程,导出线程信息.运行GC等. 使用演示样例 以下这个命令能够列出当前运行的全部虚拟机: ...
- centos git 升级应用
在阿里云服务器上部署Git 升级centos 自带的Git yum库自带版本为git1.7.1-3.el6_4.1. -------------------升级-------------------- ...
- ckeditor:复制内容到ckeditor时,只保留文本,忽略其样式解决方法
打开ckeditor 包下的config.js,在 CKEDITOR.editorConfig= function(config){...}添加一句配置: config.forcePasteAsPla ...
- python3-datetime.date详解(一)
datetime是python操作日期和时间的内置模块. python有两种日期.时间对象:“naive”和“aware”.前者由于忽略了实际情况更容易理解,操作.在任何时间空间内,它的值都取决于一个 ...
- centos中病毒
嗯 很开中了病毒,,,而且这是第二次了.... 然后大佬说让我 crontab -l 一下 然后试了下 然后出来这个东东 执行下 crontab -r 这个 然后就crontab -l 就 ...
- 剑指offer——python【第36题】两个链表的第一个公共结点
题目描述 输入两个链表,找出它们的第一个公共结点 思路 注意,这里的公告结点的意思是相同的点,不仅值相同,next也相同,那么同理公共结点后面的点也是不仅值相同,而且next也相同,这样的话,就可以把 ...
- 【备忘】SQL语句增加字段、修改字段、修改类型、修改默认值
一.修改字段默认值 alter table 表名 drop constraint 约束名字 ------说明:删除表的字段的原有约束 alter table 表名 add constraint 约束名 ...
- Java与groovy混编 —— 一种兼顾接口清晰和实现敏捷的开发方式
有大量平均水平左右的"工人"可被选择.参与进来 -- 这意味着好招人 有成熟的.大量的程序库可供选择 -- 这意味着大多数项目都是既有程序库的拼装,标准化程度高而定制化场景少 开发 ...
- List集合中的对象进行排序
类A: public class A implements Comparable<A>{ private Integer id; private String name; public A ...