zoukankan      html  css  js  c++  java
  • STL——deque学习笔记

    转载请注明:http://www.cnblogs.com/ACshasow/

                                                     STL——deque学习笔记

    概念:

    deque 即双端队列。

    (deque,全名double-ended queue)是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端

    进行。

          双端队列是限定插入和删除操作在表的两端进行的线性表。这两端分别称做端点1和端点2。也可像栈一样,可以用一个铁道转轨网络来比喻双端队列。在实际使用中,还可以有输出受限的双端队列(即一个端点允许插入和删除,另一个端点只允许插入的双端队列)和输入受限的双端队列(即一个端点允许插入和删除,另一个端点只允许删除的双端队列)。而如果限定双端队列从某个端点插入的元素只能从该端点删除,则该双端队列就蜕变为两个栈底相邻的栈了

     
    头文件:#include<deque>

    函数构造:

              deque<Elem> c     建一个空的deque。

              deque<Elem> c1(c2)     复制一个deque。

              deque<Elem> c(n)     创建一个deque,含有n个数据,数据均已缺省构造产生。

              deque<Elem> c(n, elem)    创建一个含有n个elem拷贝的deque

              deque<Elem> c(beg,end)     创建一个以[beg;end)区间的deque

              c.~deque<Elem>()     销毁所有数据,释放内存

    成员函数:

              c.assign(beg,end)    将[beg; end)区间中的数据赋值给c。

              c.assign(n,elem)    将n个elem的拷贝赋值给c。

              c. at(idx)     传回索引idx所指的数据,如果idx越界,抛出out_of_range。

              c.back()     传回最后一个数据,不检查这个数据是否存在。

              c.begin()    传回迭代器中的第一个数据。

              c.clear()     移除容器中所有数据。

              c.empty()    判断容器是否为空。

              c.end()    指向迭代器中的最后一个数据地址。

             c.erase(pos)     删除pos位置的数据,传回下一个数据的位置。

             c.erase(beg,end)     删除[beg,end)区间的数据,传回下一个数据的位置。

             c.front()     传回第一个数据。

             get_allocator    使用构造函数返回一个拷贝。

             c.insert(pos,elem)     在pos位置插入一个elem拷贝,传回新数据位置

             c.insert(pos,n,elem)     在pos位置插入>n个elem数据。无返回值

             c.insert(pos,beg,end)    在pos位置插入在[beg,end)区间的数据。无返回值

             c.max_size()     返回容器中最大数据的数量。

             c.pop_back()     删除最后一个数据。

             c.pop_front()    删除头部数据。

             c.push_back(elem)    在尾部加入一个数据。

             c.push_front(elem)    在头部插入一个数据。

             c.rbegin()    传回一个逆向队列的第一个数据。

             c.rend()    传回一个逆向队列的最后一个数据的下一个位置。

             c.resize(num)     重新指定队列的长度。

             c.size()    返回容器中实际数据的个数。

             c.swap(c2)   将c1和c2元素互换。

             swap(c1,c2)     将c1和c2元素互换。

    特点:

    1、支持随机访问,即支持[]以及at(),但是性能没有vector好。

    2、支持两端操作,push(pop)-back(front),但性能不及list。

    最佳使用情况:

    1、需要在两端插入和删除元素。

    2、无需引用容器内的元素。

    3、要求容器释放不再使用的元素。

    示例:

    #include <iostream>
    #include<deque>
    using namespace std;
    int main()
    {
        deque<int> mydeque (7,6);     // 初始化deque为7个int,每个int值为6
        mydeque.push_front(2); //插入头
        mydeque.push_back(3); //插入尾
        cout << "mydeque size: " <<  mydeque.size() << endl;
        cout << "mydeque contains:";
        for (unsigned i=0; i<mydeque.size();i++)   cout << " " << mydeque[i];
        cout << endl;
        return 0;
    }

    vector、list、deque、三个容器的选择:

        1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector 
         2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list 
         3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。

  • 相关阅读:
    HDU 4031 Attack(离线+线段树)(The 36th ACM/ICPC Asia Regional Chengdu Site —— Online Contest)
    BZOJ 1010 玩具装箱toy(四边形不等式优化DP)(HNOI 2008)
    分布式事务二阶提交DTS系统
    flume原理及代码实现
    Liferay JSP Tag Libraries介绍
    如何用maven tycho构建自己的Eclipse RCP应用
    如何合并两个git commit
    推荐一个好用的git图形化工具
    git gc干了啥
    如何把VS Code的Language Server Protocol整合到Eclipse中来
  • 原文地址:https://www.cnblogs.com/ACshasow/p/3273420.html
Copyright © 2011-2022 走看看