類模板
<deque>

std::deque

template < class T, class Alloc = allocator<T> > class deque;
雙端佇列
deque(通常讀作 "deck")是 double-ended queue 的非正式縮寫。雙端佇列是具有動態大小的序列容器,可以在兩端(前端或後端)進行擴充套件或收縮。

具體的庫可能會以不同的方式實現 deque,通常是以某種形式的動態陣列。但無論如何,它們都允許透過隨機訪問迭代器直接訪問序列中的各個元素,並且儲存由容器根據需要自動處理,進行擴充套件和收縮。

因此,它們提供了與 vector 類似的功能,但可以在序列的開頭高效地插入和刪除元素,而不僅僅是在末尾。但是,與 vector 不同,deque 不保證將其所有元素儲存在連續的儲存位置:透過偏移指向另一個元素的指標來訪問 deque 中的元素會導致 未定義行為

向量 (vector) 和雙端佇列 (deque) 都提供非常相似的介面,並且可以用於相似的目的,但內部工作方式卻大不相同:雖然向量使用一個需要偶爾重新分配以進行增長的單個數組,但雙端佇列的元素可以分散在不同的儲存塊中,容器內部保留必要的資訊,以恆定時間直接訪問其任何元素,並提供統一的順序介面(透過迭代器)。因此,雙端佇列的內部比向量 (vector) 複雜一些,但這允許它們在某些情況下更有效地增長,特別是對於非常長的序列,在這些序列中重新分配的成本更高。

對於涉及在開頭或末尾以外的位置頻繁插入或刪除元素的 O(n) 操作,雙端佇列 (deque) 的效能較差,並且與列表 (list) 和前向列表 (forward list) 相比,其迭代器和引用的一致性也較差。

容器屬性

序列
序列容器中的元素以嚴格的線性序列排序。單個元素透過其在此序列中的位置進行訪問。
動態陣列
通常實現為動態陣列,它允許直接訪問序列中的任何元素,並提供在序列開頭或末尾相對快速的新增/刪除元素的功能。
感知分配器
容器使用分配器物件來動態處理其儲存需求。

模板引數

T
元素的型別。
別名為成員型別deque::value_type.
Alloc
用於定義儲存分配模型的分配器物件型別。預設情況下,使用 allocator 類模板,它定義了最簡單的記憶體分配模型並且與值無關。
別名為成員型別deque::allocator_type.

成員型別

成員型別定義說明
value_type第一個模板引數 (T)
allocator_type第二個模板引數 (Alloc)預設為allocator<value_type>
引用allocator_type::reference對於預設的 allocatorvalue_type&
const_referenceallocator_type::const_reference對於預設的 allocatorconst value_type&
指標allocator_type::pointer對於預設的 allocatorvalue_type*
const_pointerallocator_type::const_pointer對於預設的 allocatorconst value_type*
iterator一個指向value_type隨機訪問迭代器,可轉換為const_iterator
const_iterator一個指向const value_type
reverse_iteratorreverse_iterator<iterator>
const_reverse_iteratorreverse_iterator<const_iterator>
difference_type一個有符號整數型別,與iterator_traits<iterator>::difference_type相同,通常與 ptrdiff_t 一樣
size_type一個可以表示任何非負值的difference_type的無符號整數型別,通常與 size_t 一樣
成員型別定義說明
value_type第一個模板引數 (T)
allocator_type第二個模板引數 (Alloc)預設為allocator<value_type>
引用value_type&
const_referenceconst value_type&
指標allocator_traits<allocator_type>::pointer對於預設的 allocatorvalue_type*
const_pointerallocator_traits<allocator_type>::const_pointer對於預設的 allocatorconst value_type*
iterator一個指向value_type隨機訪問迭代器,可轉換為const_iterator
const_iterator一個指向const value_type
reverse_iteratorreverse_iterator<iterator>
const_reverse_iteratorreverse_iterator<const_iterator>
difference_type一個有符號整數型別,與
iterator_traits<iterator>::difference_type
相同,通常與 ptrdiff_t 一樣
size_type一個可以表示任何非負值的difference_type的無符號整數型別,通常與 size_t 一樣

成員函式


迭代器:

容量:

元素訪問:

修改器:

分配器:

非成員函式過載