STL學習筆記 序列式容器deque

2021-07-06 00:06:49 字數 1723 閱讀 2664

上一次說了list,現在再看一下序列式容器的另外幾種,常用的stack,queue,還有乙個deque,這個我不常用,所以先看一下deque的用法:

1.deque:

vector是單向開口的連續線性空間,list是不連續的空間,支援兩邊操作,deque是一種雙向開口的連續線性空間,支援兩邊操作。由於deque的操作可以兩邊進行,所以它沒有容量的概念,也不用提供空間保留的功能。但是deque的迭代器卻比vector的迭代器要複雜的多,其時間複雜度也特別的大,所以在一般情況下,我們會把操作放入vector裡面操作,完了之後再放回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;

}

接下來看一下deque的元素操作:

pop_back,pop_front,clear,erase,insert等操作

#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;

}

下面是stack(棧)和queue(佇列),這個是常用的,沒有迭代器,棧,先進後出,佇列,先進先出,只有兩個操作,pop和push操作,這個常用的不在記錄。

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