STL——deque学习笔记

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

                                                 STL——deque学习笔记网络

概念:数据结构

 

deque 即双端队列。

 

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

进行。性能

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

 
头文件: #include<deque>

 

 

函数构造:大数据

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

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

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

          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元素互换。

特色:

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

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

最佳使用状况:

一、须要在两端插入和删除元素。

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

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

示例:

#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、三个容器的选择:

    一、若是你须要高效的随即存取,而不在意插入和删除的效率,使用vector 
     二、若是你须要大量的插入和删除,而不关心随即存取,则应使用list 
     三、若是你须要随即存取,并且关心两端数据的插入和删除,则应使用deque。

相关文章
相关标签/搜索