1. 程式人生 > 其它 >雙端佇列在 STL 中的實現方式

雙端佇列在 STL 中的實現方式

雙端佇列在 STL 中的實現方式是使用一個數組,數組裡的每個元素都指向一段固定大小的記憶體(預設使 512kb)的開始位置。
當一段記憶體空間用完的時候,會再申請一段同樣大小的新記憶體空間接在現在記憶體空間後面,然將這段新記憶體空間的開始位置記錄到上面說的陣列中。

雙端佇列相比陣列,有兩個優勢:

  1. 擴容成本低,假設已經存了 10000 個元素,陣列要重新複製這 10000 個元素,而佇列可能只要複製 100 個元素(100 × 100)
  2. 記憶體利用率高,同樣 10000 個元素,當記憶體中沒有這麼一大塊連續記憶體的時候,陣列可能失敗,而佇列可以利用各種小的零散空間

有優勢就有劣勢,雙端佇列的迭代控制更復雜,首先程式得知道佇列的頭和尾分別在哪個記憶體空間的哪個位置,然後當頭或尾存在的記憶體空間只有 1 個元素,你把它刪了,程式又得知道下面應該指向哪塊記憶體空間的頭或尾的位置


PS:在 STL 中,棧是通過介面卡模式基於佇列(deque)實現的。為什麼不用陣列(vector)來實現,原因就是上面提到的擴容代價比較大。