STL 中类 stack 实现了一个栈

1)push 能够插入元素

2)pop 移除栈顶元素

使用的时候,需要包含头文件 #include <stack>,stack 被声明如下:

namespace std
{
    template <class T, class Container = deque<T> >
    class stack;
}

第一个模板参数表示元素的类型,第二个模板参数表明了实现堆栈所使用的容器,即内部用于存储元素的容器,默认使用 deque,你可以使用任何的顺序容器,甚至于自己提供的顺序容器,只要含有 back(), push_back(), pop_back() 方法即可

定义一个栈:

std::stack<int> st;

std::stack<int, std::vector<int> > st2; // 使用 vector 做容器保存元素

这里提及一下 deque,对于 deque,元素被移除的时候,释放内存,而且在重新分配内存(realloc)的时候,不会拷贝元素,这是与 vector 不同的地方

1. 核心接口

栈少不了的三个核心接口:

1)void push() 插入元素到栈顶

2)void pop() 移除栈顶元素(注意,函数类型为 void)

3)value_type& top() 返回栈顶元素,并不会移除这个元素(注意,返回的是栈顶元素的引用),看下面的代码:

std::stack<int> st;
    st.push(1);
    st.top() = 2;   // 可以方便的修改栈顶元素
    std::cout << st.top() << "\n";   // 输出 2

注意在 STL 中,在栈为空时,top 和 pop 是未定义的,对于检查栈的大小,可以使用 empty 函数或者 size 函数

empty --- 如果栈为空,返回 true,否则返回 false

size --- 栈的大小

对于栈来说,几乎(不是全部)就是上面介绍的几个函数了

2. 类型

1)std::stack::value_type 元素的类型,等同于实现栈的顺序容器的类型,例如默认情况下,std::stack::value_type 等同于 std::deque::value_type

2)std::stack::size_type 无符号的整数类型,用于定义 stack 的大小

3)std::stack::container_type 容器类型

3. 函数补充

构造函数:

explicit stack::stack(const Container& cont);

比较操作符:

包括 ==, <=, >=, !=, <, >

两个栈相等的含义是,栈中元素数目,以及对应位置的元素相等

deque: 是一个double-ended queue,
    1)支持随即存取,也就是[]操作符,
    2)支持两端操作,push(pop)-back(front),在两端操作上与list效率差不多

因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面的原则: 
    1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector 
    2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list 
    3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。

STL之Deque的使用方法的更多相关文章

  1. 带你深入理解STL之Deque容器

    在介绍STL的deque的容器之前,我们先来总结一下vector和list的优缺点.vector在内存中是分配一段连续的内存空间进行存储,其迭代器采用原生指针即可,因此其支持随机访问和存储,支持下标操 ...

  2. STL之deque双向队列

    deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,提供随机访问,deque在接口上和vector非常相似,下面列出deque的常用成员函数: Table 6.9. C ...

  3. STL之Deque容器

    1.Deque容器 1)deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. 2)deque在接口上和vect ...

  4. STL不同容器的使用方法

    以下内容摘自:http://blog.csdn.net/u014465639/article/details/70241850 1.vector(需要导入头文件#include <vector& ...

  5. STL中deque

    以下学习一下STL中另一种序列容器——deque. deque表示double-ended queue,即双向队列,deque是通过作为动态数组的方式实现的,这样可以在两端插入元素.因此,deque可 ...

  6. STL中的set使用方法详细!!!!

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  7. STL中deque 解析

    一.deque的中控器 deque是连续空间(至少逻辑上看来如此),连续线性空间总令我们联想到array或vector.array无法成长,vector虽可成长,却只能向尾端成长,而且其所谓的成长原是 ...

  8. STL 之 sort 函数使用方法

    关于Sort Sort函数是C++ STL(Standard Template Library / 标准函数库) <algorithm>头文件中的一个排序函数,作用是将一系列数进行排序,因 ...

  9. [转]STL之deque容器详解

    Deque 容器 deque容器是C++标准模版库(STL,Standard Template Library)中的部分内容.deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中 ...

随机推荐

  1. No suitable constructor was found in NUnit Parameterised tests

    No suitable constructor was found in NUnit Parameterised tests Fairly obvious, but can also happen i ...

  2. 64位win10系统无法安装.Net framework3.5的解决方法,提示无法连接internet

    1)网上有很多办法但是无法解决 2)控制面板>>疑难解答>>系统和安全性>>使用window更新解决问题 再次执行安装即可

  3. [转]html里a标签中href调用js的几种方法

    文章转自:https://blog.csdn.net/best_luxi/article/details/45062301 我们常用的在a标签中有点击事件: 1. a href=”javascript ...

  4. TTL 传输中过期,内部网络环路

    ping目标地址的时候,如果不是显示超时,而是很快出现TTL 传输中过期,很可能情况是内部网络出现环路 tracert一下目标地址,如果路由不断重复,说明是环路

  5. GitLab - 代码仓库管理工具GitLab简介

    1 - GitLab 基于git的开源的仓库管理系统项目,使用git作为代码管理工具,并在此基础上搭建web服务,拥有与Github类似的功能. 社区版(Community Edition,CE) 企 ...

  6. 树莓派搭建bt下载机、即是安装transmission

    Transmission是一种BitTorrent客户端, 安装:sudo apt-get install transmission-daemon 给用户授权:sudo usermod -a -G p ...

  7. RocketMQ之九:RocketMQ消息发送流程解读

    在讨论这个问题之前,我们先看一下Client的整体架构. Producer与Consumer类体系 从下图可以看出以下几点:(1)Producer与Consumer的共同逻辑,封装在MQClientI ...

  8. 第四章 信息收集之nmap

    @nmap扫描工具 nmap是使用最广泛的扫描工具,主要的使用范围有,嗅探,扫描,ping. 局域网扫描 nmap扫描的基本命令: 首先在桌面右键选择open in terminal进入命令窗口,输入 ...

  9. bg_imgae

  10. 【C/C++开发】【VS开发】win32位与x64位下各类型长度对比

    64 位的优点:64 位的应用程序可以直接访问 4EB 的内存和文件大小最大达到4 EB(2 的 63 次幂):可以访问大型数据库.本文介绍的是64位下C语言开发程序注意事项. 1. 32 位和 64 ...