STL 中的 stack 是一种容器适配器,而不是一种容器。

它是容器适配器是指,只要支持一系列方法的容器(empty, size, back, push_back, pop_back),都能作为stack使用。

stack 有可能实际上是一个 vector, deque 或 list. 如果没有特殊指明,将使用 deque作为stack的实际容器。

构造函数

构造函数中包含两个模板参数。stack<stack::alue_type T, stack::container_type Container>

其中 T代表数值类型,可以是基本数据类型或用户自定义类型。

Container代表容器类型,可以是 vector, deque 或 list

 std::stack<int> first; // empty stack
std::stack<int> second(mydeque); // stack initialized to copy of deque
std::stack<int, std::vector<int>> third; // empty stack using vector
std::stack<int, std::vector<int>> fourth(myVector); // stack initialized to copy of vector using vector

成员函数

empty()

 测试栈是否为空,为空返回true,否则返回false。

bool empty() const;

size()

返回栈中元素的个数

size_type size() const;

top()

返回栈顶元素(最后push进来的那个)的引用。

referenc& top();

push(val)

压一个值到栈中,其值将被初始化为 val

void push(const value_type& val);

pop()

将栈顶元素弹出,注意这个函数无返回值,如果需要获取栈顶元素,应先调用top(),再pop()

void pop();

emplace(Args..)

emplace 功能上与 push相同。不过emplace更高效。

emplace 的参数不是容器元素本身,而是构造容器元素所需要的参数。即如果容器元素是一个类的对象,那么Args就是这个类构造函数的参数。

push 是先构造一个 temporary 的元素对象,再将这个对象拷贝到容器中。而emplace是直接在容器内用参数构造一个对象。省略了拷贝的时间消耗。

emplace 本质上是调用了各容器的 emplace_back(args...)函数

swap()

swap将两个 stack的内容交换。这两个 stack的模板参数 T和 Container必须都相同。

void swap(stack& x) 重载1:x.swap(y)

void swap(stack& x, stack& y)  重载2: swap(x, y)

关系运算符

取决于实际容器的关系运算符

C++ STL容器之 stack的更多相关文章

  1. [知识点]C++中STL容器之map

    UPDATE(20190416):写完vector和set之后,发现不少内容全部引导到map上了……于是进行了一定的描述补充与更正. 零.STL目录 1.容器之map 2.容器之vector 3.容器 ...

  2. [知识点]C++中STL容器之set

    零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 继上期的vector之后,我们又迎来了另一个类数组的STL容器——set. 二.用途与特性 set,顾名思义,集合 ...

  3. [知识点]C++中STL容器之vector

    零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 关于STL和STL容器的概念参见STL系列第一篇——map(见上).今天介绍第二个成员——vector. 二.用途 ...

  4. C++ STL 常用容器之 stack

    C++ STL Container--Stack 栈是一种先进后出(LIFO)的数据结构,限制只能在一端完成插入和删除操作,这一端叫做栈顶(top),另一端即为栈底(bottom).C++ STL(S ...

  5. STL容器之map

    [1]map容器 map 是关联容器.容器中的每一个元素都是由一个键值和一个数据值组成的. set 是一个集合它以其元素作为键值(同一个键值只能出现一次),且默认以升序排列. list 是一个顺序容器 ...

  6. STL容器之vector

    [1]模板类vector 模板类vector可理解为广义数组.广义数组,即与类型无关的数组,具有与数组相同的所有操作. 那么,你或许要问:既然C++语言本身已提供了一个序列式容器array,为什么还要 ...

  7. STL容器之set

    [1]set容器 一个集合(set)是一个容器,它其中所包含的元素的值是唯一的. [2]set容器方法 (1)set构造函数.插入函数.遍历过程 应用示例代码如下: #include <set& ...

  8. STL容器之list

    [1]list简介 实质上,list容器就是一个双向链表,可以高效地进行插入.删除操作. [2]list链表常用方法 (1)构造.赋值.清空.删除.插入.判空等 应用示例代码如下: #include ...

  9. STL容器之deque

    [1]deque容器 deque 是对 vector 和 list 优缺点的结合,它是处于两者之间的一种容器. [2]deque方法集 应用示例代码: #include <deque> # ...

随机推荐

  1. Bootstrap标签页

    用法 您可以通过以下两种方式启用标签页: 通过 data 属性:您需要添加 data-toggle="tab" 或 data-toggle="pill" 到锚文 ...

  2. tar.xz格式文件的解压方法(转载)

    转自:http://bbs.chinaunix.net/thread-3610738-1-1.html 现在很多找到的软件都是tar.xz的格式的,xz 是一个使用 LZMA压缩算法的无损数据压缩文件 ...

  3. jvm学习理解

    1.本文是转载别人所写的,因为这个jvm看很多遍老是忘,转载只是备忘和查看方便. 转载地址: https://mp.weixin.qq.com/s/reFDCkUdq1QGGDs_Mnuesg 图中涉 ...

  4. [App Store Connect帮助]七、在 App Store 上发行(3.4)提交至“App 审核”:将构建版本从审核中移除

    若要停止“App 审核”流程,您可以将该 App 版本从 App 审核中移除.要执行此项操作,App 状态必须为下列之一: 正在等待出口合规检查 正在等待审核 正在审核 等待开发者发布 等待 Appl ...

  5. mysql 状态查询

    select  COUNT(case when info.State = '0' then State end  ) as daichuliCount, COUNT(case when info.St ...

  6. 洛谷P4141消失之物(背包经典题)——Chemist

    题目地址:https://www.luogu.org/problemnew/show/P4141 分析:这题当然可以直接暴力枚举去掉哪一个物品,然后每次暴力跑一遍背包,时间复杂度为O(m*n^2),显 ...

  7. 题解报告:poj 1195 Mobile phones(二维BIT裸题)

    Description Suppose that the fourth generation mobile phone base stations in the Tampere area operat ...

  8. 题解报告:hdu 2709 Sumsets

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2709 Problem Description Farmer John commanded his co ...

  9. 转-解决Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'问题

    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)   Red Hat Enterpr ...

  10. Webform 内置对象(Response对象、Request对象,QueryString)

    Response对象:响应请求 Response.Write("<script>alert('添加成功!')</script>"); Response.Re ...