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。

原文地址:https://www.cnblogs.com/ACshasow/p/3273420.html