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...