zoukankan      html  css  js  c++  java
  • STL之Deque的使用方法

    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() << " ";   // 输出 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。

  • 相关阅读:
    cf B. Sereja and Suffixes
    cf E. Dima and Magic Guitar
    cf D. Dima and Trap Graph
    cf C. Dima and Salad
    最短路径问题(floyd)
    Drainage Ditches(网络流(EK算法))
    图结构练习—BFSDFS—判断可达性(BFS)
    Sorting It All Out(拓扑排序)
    Power Network(最大流(EK算法))
    Labeling Balls(拓扑)
  • 原文地址:https://www.cnblogs.com/seer/p/4080858.html
Copyright © 2011-2022 走看看