[英]Does deque provide O(1) complexity when inserting on top
從C ++標准:
23.3.3.4雙端修飾符[deque.modifiners]
[...]
void push_front(const T& x);
void push_front(T&& x);
void push_back(const T& x);
void push_back(T&& x);
[...]
3復雜度:復雜度是線性的,要插入的元素數量加上到雙端隊列開始和結束的距離中的較小者。 在雙端隊列的開始或末尾插入單個元素總是花費固定的時間,並導致對T的構造函數的單個調用。
重點礦
C ++ 98,第23.2.1節(模板類雙端隊列)
“雙端隊列...支持在開始或結束時進行恆定時間的插入和擦除操作;在中間的插入和擦除操作采用線性時間。也就是說,雙端隊列特別針對在開始和結束時推送和彈出元素進行了優化與向量一樣,存儲管理是自動處理的。”
是的:兩端都插入O(1)。
std :: deque的cppreference條目具有以下復雜性:
雙端隊列常見操作的復雜性(效率)如下:
這與C ++標准草案第23.3.3.1
節“ 類模板雙端隊列概述 ”一致(其中強調 ):
雙端隊列是一個序列容器,它像矢量(23.3.6)一樣,支持隨機訪問迭代器。 此外,它還支持在開始或結束時進行恆定時間的插入和擦除操作。 在中間插入和擦除需要線性時間。 也就是說, 雙端隊列已針對在開頭和結尾處推送和彈出元素進行了特別優化 。 與向量一樣,存儲管理是自動處理的。
對於std :: vector cppreference說:
向量上常用運算的復雜度(效率)如下:
這與標准草案第23.3.6.1
節“ 類模板矢量概述”一致 :
向量是支持隨機訪問迭代器的序列容器。 另外, 它在末尾支持(攤銷)恆定時間插入和擦除操作。 在中間插入和擦除需要線性時間。 存儲管理是自動處理的,盡管可以提供一些提示以提高效率。[...]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.