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。

相關文章
相關標籤/搜索