由於在堆棧被用於容器所需的唯一操作是:爲什麼std :: stack默認使用std :: deque?
- 背面()
- 的push_back()
- pop_back()
爲什麼是默認的容器因爲它是一個deque而不是一個向量?
不要deque reallocations給front()前的元素的緩衝區,這樣push_front()是一個有效的操作嗎?這些元素是不是浪費了,因爲它們永遠不會用在堆棧的上下文中?
如果沒有使用deque這種方式而不是使用向量的開銷,爲什麼priority_queue向量不是deque也是默認值? (priority_queue需要前(),的push_back()和pop_back() - 基本上相同的作爲疊層)
更新基於下面的數目:
似乎雙端隊列的方式是通常實現的是固定大小數組的可變大小數組。這使得增長速度比一個向量(需要重新分配和複製)要快,因此對於類似堆棧的增加和刪除元素,deque可能是更好的選擇。
priority_queue需要大量編制索引,因爲每個刪除和插入都需要運行pop_heap()或push_heap()。這可能會使向量成爲更好的選擇,因爲添加元素仍然是不變的。
「更新」中的推理並不完全正確。 vector通常會比_deque更快地移除元素。 deque對_growing memory_更快,而不是推動元素。 – 2015-02-12 17:38:54