![](/img/trans.png)
[英]Why does std::deque allocate memory for its elements in the default constructor?
[英]Why does std::stack use std::deque by default?
由於在堆棧中使用容器所需的唯一操作是:
為什么它的默認容器是deque而不是vector?
不要deque重新分配在front()之前給出元素緩沖區,以便push_front()是一個有效的操作嗎? 這些元素不會浪費,因為它們永遠不會在堆棧的上下文中使用嗎?
如果沒有以這種方式使用雙端隊列而不是向量的開銷,為什么priority_queue的默認值也不是deque的向量? (priority_queue需要front(),push_back()和pop_back() - 基本上與堆棧相同)
根據以下答案進行了更新:
似乎deque通常實現的方式是固定大小數組的可變大小數組。 這使得增長速度比矢量(需要重新分配和復制)更快,因此對於類似於添加和刪除元素的堆棧之類的東西,deque可能是更好的選擇。
priority_queue需要大量索引,因為每次刪除和插入都需要運行pop_heap()或push_heap()。 這可能使得向量成為更好的選擇,因為添加元素仍然是分攤常數。
隨着容器的增長,向量的重新分配需要將所有元素復制到新的內存塊中。 增加deque會分配一個新塊並將其鏈接到塊列表 - 不需要復制。
當然,如果您願意,可以指定使用不同的后備容器。 因此,如果你有一個你知道不會增長太多的堆棧,請告訴它使用向量而不是deque,如果這是你的偏好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.