STL系列(4):Deque 雙向隊列

deque是一種優化了的、對序列兩端元素進行添加和刪除操作的基本序列容器。它允許較爲快速地隨機訪問,但它不像vector 把所有的對象保存在一塊連續的內存塊,而是採用多個連續的存儲塊,並且在一個映射結構中保存對這些塊及其順序的跟蹤。向deque 兩端添加或刪除元素的開銷很小。它不需要重新分配空間,所以向末端增加元素比vector 更有效。  

實際上,deque 是對vector 和list 優缺點的結合,它是處於兩者之間的一種容器。  


deque 的特點: 

(1) 隨機訪問方便,即支持[ ] 操作符和vector.at() ,但性能沒有vector 好;

(2) 可以在內部進行插入和刪除操作,但性能不及list ; 

(3) 可以在兩端進行push 、pop ; 

(4) 相對於verctor 佔用更多的內存。 雙向隊列和向量很相似,但是它允許在容器頭部快速插入和刪除(就像在尾部一樣)。 

函數介紹:

1.Constructors 創建一個新雙向隊列 

語法: 
deque();//創建一個空雙向隊列 
deque( size_type size );// 創建一個大小爲size的雙向隊列 

deque( size_type num, const TYPE &val ); //放置num個val的拷貝到隊列中 

deque( const deque &from );// 從from創建一個內容一樣的雙向隊列 

deque( input_iterator start, input_iterator end ); 

// start 和 end - 創建一個隊列,保存從start到end的元素。 

2.Operators 比較和賦值雙向隊列 

//可以使用[]操作符訪問雙向隊列中單個的元素 

3.assign() 設置雙向隊列的值 

語法: 
void assign( input_iterator start, input_iterator end);  //start和end指示的範圍爲雙向隊列賦值 

void assign( Size num, const TYPE &val );//設置成num個val。 

4.at() 返回指定的元素 

語法: 

reference at( size_type pos ); 返回一個引用,指向雙向隊列中位置pos上的元素 

5.back() 返回最後一個元素 

語法:  

reference back();//返回一個引用,指向雙向隊列中最後一個元素 

6.begin() 返回指向第一個元素的迭代器 

語法:  

iterator begin();//返回一個迭代器,指向雙向隊列的第一個元素 

7.clear() 刪除所有元素 

8.empty() 返回真如果雙向隊列爲空 

9.end() 返回指向尾部的迭代器 

10.erase() 刪除一個元素 

語法: 
iterator erase( iterator pos ); //刪除pos位置上的元素 

iterator erase( iterator start, iterator end ); //刪除start和end之間的所有元素 //返回指向被刪除元素的後一個元素 

11.front() 返回第一個元素的引用 

12.get_allocator() 返回雙向隊列的配置器 

13.insert() 插入一個元素到雙向隊列中 

語法: 
iterator insert( iterator pos, size_type num, const TYPE &val ); //pos前插入num個val值 

void insert( iterator pos, input_iterator start, input_iterator end );  //插入從start到end範圍內的元素到pos前面

14.max_size() 返回雙向隊列能容納的最大元素個數 

15.pop_back() 刪除尾部的元素 

16.pop_front() 刪除頭部的元素 

17.push_back() 在尾部加入一個元素 

18.push_front() 在頭部加入一個元素 

19.rbegin() 返回指向尾部的逆向迭代器 

20.rend() 返回指向頭部的逆向迭代器 

21.resize() 改變雙向隊列的大小 

22.size() 返回雙向隊列中元素的個數 

23.swap() 和另一個雙向隊列交換元素 
語法: 
void swap( deque &target );// 交換target和現雙向隊列中元素

發佈了25 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章