C++deque雙向隊列


1、簡介

  deque 也是順序容器的一種,同時也是一個可變長數組。要使用 deque,需要包含頭文件 deque。所有適用於 vector 的操作都適用於 deque。
  在 deque 中,隨機存取任何元素都能在常數時間內完成(但慢於vector)。它相比於 vector 的優點是,vector 在頭部刪除或添加元素的速度很慢,在尾部添加元素的性能較好,而 deque 在頭尾增刪元素都具有較好的性能(大多數情況下都能在常數時間內完成)。它有兩種 vector 沒有的成員函數:
  void push_front (const T & val); //將 val 插入容器的頭部
  void pop_front(); //刪除容器頭部的元素

2、deque的中控器

  deque是由一段一段的定量連續空間構成。一旦有必要在deque的前端或尾端增加新空間,便配置一段定量連續空間,串接在整個deque的頭端或尾端。
  deque的最大任務,便是在這些分段的定量連續空間上,維護其整體連續的假象,並提供隨機存取的接口。避開了“重新配置、復制、釋放”的輪回,代價則是復雜的迭代器架構。

  deque采用一塊所謂的map(注意,不是STL的map容器)作為主控。這里所謂map是一小塊連續空間 ,其中每個元素(此處稱為一個節點, node)都是指針,指向另一段(較大的) 連續線性空間,稱為緩沖區。緩沖區才是deque的存儲空間主體。

3、數據結構

 1 template <class T, class Allod alloc, size_t Bufsiz = 0>
 2 
 3 class deque {
 4 
 5 public:
 6   typedef T value_type;
 7   typedef value_type* pointer;
 8   ...
 9 
10 protected:
11   typedef pointer* map pointer;
12 
13 protected:
14   map_pointer map;//指向map,map是塊連續空間,其內的每個元素都是一個指針,指向一塊緩沖區
15   size_type map_size;//map可容納多少指針
16 
17   ...
18 
19 }
View Code

4、構造和內存管理

  如果申請的map空間不夠時,也需要重新配置更大的空間,將原來map里的指針拷貝過來,最后釋放原來的空間。

5、和vector的區別

  vector是單向開口的連續線性空間, dequeu是一種雙向開口的連續線性定 ;
  deque允許於常數時間內對起頭端進行元素的插入或移除操作 ;
  deque沒有所謂容量(capacity)觀念,因為它是動態地以分段連續空間組合而成,隨時可以增加一段新的空間並鏈接起來


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM