教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

C++ 培訓(xùn)之C++STL 一般總結(jié)(三)

更新時(shí)間:2016年08月26日16時(shí)50分 來(lái)源:傳智播客C++培訓(xùn)學(xué)院 瀏覽次數(shù):

4.適配器
STL提供了三個(gè)容器適配器:queue、priority_queue、stack。這些適配器都是包裝了vector、list、deque中某個(gè)順序容器的包裝器。注意:適配器沒(méi)有提供迭代器,也不能同時(shí)插入或刪除多個(gè)元素。下面對(duì)各個(gè)適配器進(jìn)行概括總結(jié)。
(1)stack用法
#include <stack>
template < typename T, typename Container=deque > class stack;
可以使用三個(gè)標(biāo)準(zhǔn)順序容器vecotr、deque(默認(rèn))、list中的任何一個(gè)作為stack的底層模型。
bool stack<T>::empty()                          //判斷堆棧是否為空
void stack<T>::pop()                            //彈出棧頂數(shù)據(jù)
stack<T>::push(T x)                             //壓入一個(gè)數(shù)據(jù)
stack<T>::size_type stack<T>::size()            //返回堆棧長(zhǎng)度
T stack<T>::top()                               //得到棧頂數(shù)據(jù)
 代碼示例:
stack<int> intDequeStack;  
stack<int,vector<int>> intVectorStack;  
stack<int,list<int>> intListStack;

(2)queue用法
#include <queue>
template<typename T, typename Container = deque<T> > class  queue;
第一個(gè)參數(shù)指定要在queue中存儲(chǔ)的類(lèi)型,第二個(gè)參數(shù)規(guī)定queue適配的底層容器,可供選擇的容器只有dequeue和list。對(duì)大多數(shù)用途使用默認(rèn)的dequeue。
queue<T>::push(T x)
void queue<T>::pop()
T queue<T>::back()
T queue<T>::front()
queue<T>::size_type
queue<T>::size()
bool queue<T>::empty()
代碼示例:
queue<int> intDequeQueue;    
queue<int,list<int>> intListQueue;

(3)priority_queue用法
#include <queue>
template <typename T, typename Container = vector<T>, typename Compare = less<T> > class priority_queue;
priority_queue也是一個(gè)隊(duì)列,其元素按有序順序排列。其不采用嚴(yán)格的FIFO順序,給定時(shí)刻位于隊(duì)頭的元素正是有最高優(yōu)先級(jí)的元素。如果兩個(gè)元素有相同的優(yōu)先級(jí),那么它們?cè)陉?duì)列中的順序就遵循FIFO語(yǔ)義。默認(rèn)適配的底層容器是vector,也可以使用deque,list不能用,因?yàn)閜riority_queue要求能對(duì)元素隨機(jī)訪(fǎng)問(wèn)以便進(jìn)行排序。
priority_queue<T>::push(T x)
void priority_queue<T>::pop()
T priority_queue<T>::top()
priority_queue<T>::size_type
priority_queue<T>::size()
bool priority_queue<T>::empty()
代碼示例:
priority_queue< int, vector<int>, greater<int> >
priority_queue< int, list<int>, greater<int> >
 
標(biāo)準(zhǔn)庫(kù)默認(rèn)使用元素類(lèi)型的<操作符來(lái)確定它們之間的優(yōu)先級(jí)關(guān)系,用法有三:(下文轉(zhuǎn)自http://www.cnblogs.com/vvilp/articles/1504436.html)
優(yōu)先隊(duì)列第一種用法,通過(guò)默認(rèn)使用的<操作符可知在整數(shù)中元素大的優(yōu)先級(jí)高。
priority_queue<int> qi;
示例中輸出結(jié)果為:9 6 5 3 2
優(yōu)先隊(duì)列第二種用法,建立priority_queue時(shí)傳入一個(gè)比較函數(shù),使用functional.h函數(shù)對(duì)象作為比較函數(shù)。
priority_queue<int, vector<int>, greater<int> >qi2;
示例2中輸出結(jié)果為:2 3 5 6 9
優(yōu)先隊(duì)列第三種用法,是自定義優(yōu)先級(jí)。
struct node
{
     friend bool operator< (node n1, node n2)
     {
         return n1.priority < n2.priority;
     }
     int priority;
     int value;
};
priority_queue<node> qn;
在示例3中輸出結(jié)果為:
優(yōu)先級(jí)  值
9          5
8          2
6          1
2          3
1          4
在該結(jié)構(gòu)中,value為值,priority為優(yōu)先級(jí)。通過(guò)自定義operator<操作符來(lái)比較元素中的優(yōu)先級(jí)。注意:必須是自定義<操作符才行,把上述的結(jié)構(gòu)中的<操作符改成>編譯不通過(guò)。

 本文版權(quán)歸傳智播客C++培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客C/C++培訓(xùn)學(xué)院
首發(fā):http://metathetuscanyresort.com/c/ 
0 分享到:
和我們?cè)诰€(xiàn)交談!