STL教程(四)——deque

如需轉載,請註明出處。

deque前面帶有字母d,是double的含義,它是雙端隊列,而是queue是單端的。以下雙端隊列均指deque。

示意圖如下:

雙端隊列是序列容器,兩端具有擴展和收縮的特徵。
它們與向量類似,但在插入和刪除元素時更有效。與向量不同,可能無法保證連續的存儲分配。
雙端隊列基本上是數據結構雙端隊列的實現。隊列數據結構允許僅在末尾插入並從前面刪除。這就像現實生活中的一個隊列,其中人們從前面移除並添加在後面。雙端隊列是隊列的特殊情況,其中兩端都可以進行插入和刪除操作。

創建deque對象的語法:

deque<object_type> deque_name;  

deque的函數與vector相同,前後都增加了push和pop操作。

#include <iostream> 
#include <deque> 

using namespace std; 

void showdq(deque <int> g) 
{ 
	deque <int> :: iterator it; 
	for (it = g.begin(); it != g.end(); ++it) 
		cout << '\t' << *it; 
	cout << '\n'; 
} 

int main() 
{ 
	deque <int> gquiz; 
	gquiz.push_back(10); 
	gquiz.push_front(20); 
	gquiz.push_back(30); 
	gquiz.push_front(15); 
	cout << "The deque gquiz is : "; 
	showdq(gquiz); 

	cout << "\ngquiz.size() : " << gquiz.size(); 
	cout << "\ngquiz.max_size() : " << gquiz.max_size(); 

	cout << "\ngquiz.at(2) : " << gquiz.at(2); 
	cout << "\ngquiz.front() : " << gquiz.front(); 
	cout << "\ngquiz.back() : " << gquiz.back(); 

	cout << "\ngquiz.pop_front() : "; 
	gquiz.pop_front(); 
	showdq(gquiz); 

	cout << "\ngquiz.pop_back() : "; 
	gquiz.pop_back(); 
	showdq(gquiz); 

	return 0; 
} 

上述程序的輸出是:

The deque gquiz is :     15    20    10    30

gquiz.size() : 4
gquiz.max_size() : 4611686018427387903
gquiz.at(2) : 10
gquiz.front() : 15
gquiz.back() : 30
gquiz.pop_front() :     20    10    30

gquiz.pop_back() :     20    10

Deque的方法:

insert():返回指向新插入元素的第一個的迭代器。
rbegin():返回一個反向迭代器,它指向雙端隊列的最後一個元素(即它的反向開始)。
rend():返回一個反向迭代器,它指向deque開頭之前的位置(被認爲是它的反向結束)。
cbegin():返回指向容器第一個元素的常量迭代器,也就是說,迭代器不能用於修改,只遍歷deque。
deque max_size():返回deque容器可以容納的最大元素數。
assign():將值分配給相同或不同的deque容器。
resize()L:改變雙端隊列大小的函數。
push_front():此函數用於將元素從前面推入雙端隊列。
push_back():此函數用於將元素從後面推入雙端隊列。
pop_front()函數用於從前面彈出或刪除雙端隊列中的元素。 
pop_back()函數用於從後面彈出或刪除雙端隊列中的元素。
front()函數用於引用deque容器的第一個元素。 
back()函數用於引用deque容器的最後一個元素。
clear()函數用於刪除deque容器的所有元素,從而使其大小爲0. 
erase()函數用於從中刪除元素來自指定位置或範圍的容器。
empty()函數用於檢查deque容器是否爲空。 
size()函數用於返回deque容器的大小或deque容器中的元素數。
operator = operator用於通過替換現有內容將新內容分配給容器。 
operator []運算符用於引用運算符內給定位置的元素。
at()函數用於引用作爲函數參數給出的位置處的元素。
swap()函數用於將一個雙端隊列的內容與另一個相同類型和大小的雙端隊列交換。
begin()函數用於返回指向deque容器的第一個元素的迭代器。
end()函數用於返回指向deque容器的最後一個元素的迭代器。
emplace_front()函數用於將新元素插入到deque容器中。新元素被添加到雙端隊列的開頭。 emplace_back()函數用於將新元素插入到deque容器中。新元素被添加到雙端隊列的末尾。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章