上一次說了list,現在再看一下序列式容器的另外幾種,常用的stack,queue,還有乙個deque,這個我不常用,所以先看一下deque的用法:
1.deque:
vector是單向開口的連續線性空間,list是不連續的空間,支援兩邊操作,deque是一種雙向開口的連續線性空間,支援兩邊操作。由於deque的操作可以兩邊進行,所以它沒有容量的概念,也不用提供空間保留的功能。但是deque的迭代器卻比vector的迭代器要複雜的多,其時間複雜度也特別的大,所以在一般情況下,我們會把操作放入vector裡面操作,完了之後再放回deque中。。。
看乙個簡單的測試例子:
接下來看一下deque的元素操作:#include #include #includeusing namespace std;
int main()
; dequed1(a,a+5);//1,2,3,4,5
d1.push_back(9);//1,2,3,4,5,9尾端插入
d1.push_front(0);//0,1,2,3,4,5,9頭部插入
deque::iterator ite=find(d1.begin(),d1.end(),2);
cout<<*ite;//2
return 0;
}
pop_back,pop_front,clear,erase,insert等操作
下面是stack(棧)和queue(佇列),這個是常用的,沒有迭代器,棧,先進後出,佇列,先進先出,只有兩個操作,pop和push操作,這個常用的不在記錄。#include #include #includeusing namespace std;
int main()
; dequed1(a,a+5);//1,2,3,4,5
d1.push_back(9);//1,2,3,4,5,9尾端插入
d1.push_front(0);//0,1,2,3,4,5,9頭部插入
deque::iterator ite=find(d1.begin(),d1.end(),2);
deque::iterator ite1=find(d1.begin(),d1.end(),3);
cout<<*ite;//2
d1.pop_back();//0,1,2,3,4,5
d1.pop_front();//1,2,3,4,5
d1.insert(ite,8);//1,2,8,3,4,5
d1.erase(ite);//這個迭代器已經無效,當插入操作進行時
return 0;
}
stl原碼剖析中還介紹了heap(堆)和priority_queue(優先佇列)。。
現在分別看一下如何使用:
heap的測試**:
#include #include #includeusing namespace std;
int main()
; vectorivec(ia,ia+9);
make_heap(ivec.begin(),ivec.end());//構建大頂堆
for (int i=0;i
#include #include #includeusing namespace std;
int main()
; priority_queueipq(ia,ia+9);
while (!ipq.empty())
{ cout<
STL學習筆記 序列式容器list
由於vector的使用,經常會出現迭代器錯誤,主要是因為vector在每次更改完資料就會重新配置,迭代器就會失效,list的結構和vector的設計差異決定了list在這方面具有優越性,list的insert和splice操作不會造成迭代器失效,並且erase也只會是讓當前元素的迭代器失效。list...
STL容器 順序容器 佇列queue和deque
queue單向佇列,先進先出,也就是從尾部插入,頭部取出 操作 queueq 建立乙個int型空佇列q q.empty 判斷佇列是否為空,為空返回true q.push s 將變數s從隊尾入隊 q.pop 將隊頭元素彈出,佇列中不再有該元素 q.front 只返回隊頭元素,只是檢視,佇列中元素依然存...
STL 序列式容器細節
stl 序列式容器細節 一 概論 1 序列式容器 array build in c 內建 vector heap內含乙個vector priority queue內含乙個heap list slist deque stack內含乙個deque queue內含乙個deque 2 關聯式容器 rb tr...