STL庫實現(1) deque雙向佇列

2021-06-12 11:56:03 字數 2113 閱讀 2535

stl庫實現之雙端佇列

度娘說:

deque 即雙端佇列。(deque,全名double-ended queue)是一種具有佇列和棧的性質的資料結構。雙端佇列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。

雙端佇列是限定插入和刪除操作在表的兩端進行的線性表。這兩端分別稱做端點1和端點2。也可像棧一樣,可以用乙個鐵道轉軌網路來比喻雙端佇列。在實際使用中,還可以有輸出受限的雙端佇列(即乙個端點允許插入和刪除,另乙個端點只允許插入的雙端佇列)和輸入受限的雙端佇列(即乙個端點允許插入和刪除,另乙個端點只允許刪除的雙端佇列)。而如果限定雙端佇列從某個端點插入的元素只能從該端點刪除,則該雙端佇列就蛻變為兩個棧底相鄰的棧了。

#include deque容器類與vector類似,支援隨機訪問和快速插入刪除,它在容器中某一位置上的操作所花費的是線性時間。與vector不同的是,deque還支援從開始端插入資料:push_front()。

dequec 建立乙個空的deque

dequec1(c2) 複製乙個deque。

dequec(n) 建立乙個deque,含有n個資料,資料均已預設構造產生。

dequec(n, elem) 建立乙個含有n個elem拷貝的deque

dequec(beg,end) 建立乙個以[beg;end)區間的deque

c.~deque() 銷毀所有資料,釋放記憶體

c.assign(beg,end) 將[beg; end)區間中的資料賦值給c。

c.assign(n,elem) 將n個elem的拷貝賦值給c。

c. at(idx) 傳回索引idx所指的資料,如果idx越界,丟擲out_of_range。

c.back() 傳回最後乙個資料,不檢查這個資料是否存在。

c.begin() 傳回迭代器中的第乙個資料。

c.clear() 移除容器中所有資料。

c.empty() 判斷容器是否為空。

c.end() 指向迭代器中的最後乙個資料位址。

c.erase(pos) 刪除pos位置的資料,傳回下乙個資料的位置。

c.erase(beg,end) 刪除[beg,end)區間的資料,傳回下乙個資料的位置。

c.front() 傳回第乙個資料。

get_allocator 使用建構函式返回乙個拷貝。

c.insert(pos,elem) 在pos位置插入乙個elem拷貝,傳回新資料位置

c.insert(pos,n,elem) 在pos位置插入》n個elem資料。無返回值

c.insert(pos,beg,end) 在pos位置插入在[beg,end)區間的資料。無返回值

c.max_size() 返回容器中最大資料的數量。

c.pop_back() 刪除最後乙個資料。

c.pop_front() 刪除頭部資料。

c.push_back(elem) 在尾部加入乙個資料。

c.push_front(elem) 在頭部插入乙個資料。

c.rbegin() 傳回乙個逆向佇列的第乙個資料。

c.rend() 傳回乙個逆向佇列的最後乙個資料的下乙個位置。

c.resize(num) 重新指定佇列的長度。

c.size() 返回容器中實際資料的個數。

c.swap(c2)

swap(c1,c2) 將c1和c2元素互換。

下面是乙個典型的不能在典型的題目了。。

#include #include #include #include using namespace std;

int main()

else if(!(strcmp(s,"rin")))

else if(!(strcmp(s,"lout")))

else

}else if(!(strcmp(s,"rout")))

else

}else wrong[k++]=++count;

}j=0;

for (pos=c.begin();pos!=c.end();pos++)

{if(j

morewindows說:

另外要注意一點。對於deque和vector來說,盡量少用erase(pos)和erase(beg,end)。因為這在中間刪除資料後會導致後面的資料向前移動,從而使效率低下。

STL雙端佇列 deque

include include include include includeusing namespace std deque採用一塊map 不是stl中的map,是一塊連續空間 作為主控,每個元素都是乙個節點 cur fist last node 指向另一段連續較大的空間 成為緩衝區 預設512...

STL之Deque雙端佇列

今天要寫乙個樹的層次遍歷程式,要用到佇列,於是就查了一下deque的資料,如下。deque 總覽 deque 和 vector 一樣都是標準模板庫中的內容,deque 是雙端佇列,在介面上和 vector 非常相似,在許多操作的地方可以直接替換。假如讀者已經能夠有效地使用 vector 容器,下面提...

STL容器 deque實現

vector是單向開口的連續線性空間,deque則是一種雙向開口的連續線性空間,可以在頭尾兩端分別做元素的插入和刪除操作。vector雖然從技術上也可以實現對頭尾兩端進行操作,但由於vector的底層實現特點的原因,其頭部操作效率奇差,故stl沒有為vector實現這一功能。deque和vector...