zoukankan      html  css  js  c++  java
  • C++ STL容器之 stack

    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

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

    成员函数

    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)

    关系运算符

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

  • 相关阅读:
    如何提高技术素养
    spoolsv.exe 无法启动
    太阳高度角和方位角的计算
    树莓派 3 alsa 声卡驱动
    PHP 7 Xdebug 深深的坑
    java 线性规划 和lingo 比较
    Python Microsoft Visual C++ Compiler Package for Python 2.7
    Node debug
    angular 调试 js (分 karms protractor / test e2e unit )
    hbase scan 的例子
  • 原文地址:https://www.cnblogs.com/yutongzhu/p/5865307.html
Copyright © 2011-2022 走看看