C++STL容器deque


deque簡介

deque屬於序列式容器,和vector十分相似,采用dynamic array來管理元素,提供隨機訪問,但是deque的dynamic array頭尾兩端都開放,可以在頭尾兩端快速安插和刪除。

為了提供這種能力,deque通常實現為一組獨立區塊,第一區塊朝某方向發展,最末區塊朝另一方向發展。

使用條件:

包含頭文件

#include<deque>

deque類型定義於命名空間std內的一個class template

namespace std { template <typename T, typename Allocator = allocator<T> >
    class deque; }

這里的第一個template參數用來表明元素類型,第二個template實參可有可無,用來指定內存模型,默認為allocator。

deque的能力

1.能夠在兩端快速安插和移除元素,這些操作可以在攤提的常量時間內完成,但在中段安插和移除元素的速度相對較慢。

2.訪問元素時deque內部結構會多一個間接過程,所以元素的訪問和迭代器的動作會稍稍慢一些呢。

3.在PC這樣的內存區塊有大小限制的系統中,deque使用不止一塊內存,所以可以內含更多元素,因此deque的max_size()可能更大哦。

4.deque的迭代器是隨機訪問迭代器。

deque操作函數

1.構造函數和析構函數

deque<elem> c          //default構造函數,產生一個空的deque
deque<elem> c(c2)      //copy構造函數,建立c2的同型deque並成為c2的一份拷貝
deque<elem> c(n)       //利用default構造函數生成一個大小為n的deque
deque<elem> c(n,t)     //建立一個大小為n的deque,每個元素值都是t
deque<elem> c(beg,end) //建立一個deque,以區間[beg,end)作為元素初值
c.~deque()             //銷毀所有元素,釋放內存

注意:deque因為內存區塊的問題,不提供容量操作

2.非更易型操作

c.empty()          //返回容器是否為空
c.size()           //返回目前的元素個數
c.max_size()       //返回元素個數之最大可能量
c.shrink_to_fit()  //要求降低容量,以符合元素個數
c[id]              //返回索引id指向的元素,不檢查范圍
c.at(id)           //返回索引id指向的元素,如果超出范圍就跑出range-error異常
c.front()          //返回第一元素
c.back()           //返回最末元素
c.begin()          //返回一個迭代器指向第一元素
c.end()            //返回一個迭代器指向最末元素的下一位置
c.rbegin()         //返回一個反向迭代器指向反向迭代的第一元素
c.rend()           //返回一個反向迭代器指向反向迭代的最末元素的下一位置

3.更易型操作

c=c2                   //將c2的全部元素賦給c
c.push_back(elem)      //附加一個elem的拷貝於末尾
c.pop_back()           //移除最后一個元素,但是不返回它
c.push_front(elem)     //在頭部插入一個elem的拷貝
c.pop_front()          //移除第一個元素,但是不返回它
c.assign(n,elem)       //復制n個elem,賦值給c
c.assign(beg,end)      //將區間[beg,end)所有元素賦值給c
c.insert(pos,elem)     //在iterator位置pos之前方插入一個elem拷貝,並返回新元素的位置
c.insert(pos,n,elem)   //在ierator位置pos之前方插入n個elem拷貝,並返回第一個新元素的位置,若沒有元素,則返回pos
c.insert(pos,beg,end)  //在ierator位置pos之前方插入區間[beg,end)內所有元素的拷貝,並返回第一個新元素的位置,若沒有元素,則返回pos
c.erase(pos)           //移除iterator位置pos上的元素,返回下一個元素的位置
c.erase(beg,end)       //移除區間[beg,end)內的所有元素,返回下一個元素的位置
c.resize(num)          //將元素數量改為num,如果size()變大,多出的新元素都要以default函數初始化
c.resize(num,elem)     //將元素數量改為num,如果size()變大,多出新元素都是elem的拷貝
c.clear()              //移除所有元素,清空容器

注意:在deque為空的情況下,assgin()和insert()我們建議使用前者。

deque的操作並不復雜,在以下情形中最好采用deque:

  • 需要在兩端安插和移除元素(畢竟雙端隊列)
  • 無需指向容器內的元素
  • 要求不再使用的元素必須釋放


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM