1遂鹊、stack
stack 模板類的定義在頭文件《stack》中飞袋。
stack 模板類需要兩個模板參數(shù),一個是元素類型句各,一個容器類型吸占,但只有元素類型是必要
的,在不指定容器類型時凿宾,默認的容器類型為deque矾屯。
定義stack 對象的示例代碼如下:stack s1;
stack 的基本操作有:
入棧,如例:s.push(x);
出棧初厚,如例:s.pop();注意件蚕,出棧操作只是刪除棧頂元素,并不返回該元素产禾。
訪問棧頂排作,如例:s.top()
判斷棧空下愈,如例:s.empty()纽绍,當棧空時势似,返回true拌夏。
訪問棧中的元素個數(shù)僧著,如例:s.size()。
2障簿、queue
queue 模板類的定義在頭文件中盹愚。
與stack 模板類很相似,queue 模板類也需要兩個模板參數(shù)站故,一個是元素類型皆怕,一個容器類
型,元素類型是必要的西篓,容器類型是可選的愈腾,默認為deque 類型。
定義queue 對象的示例代碼如下:
queue q1;
queue 的基本操作有:
入隊岂津,如例:q.push(x); 將x 接到隊列的末端虱黄。
出隊,如例:q.pop(); 彈出隊列的第一個元素吮成,注意橱乱,并不會返回被彈出元素的值。
訪問隊首元素粱甫,如例:q.front()泳叠,即最早被壓入隊列的元素。
訪問隊尾元素茶宵,如例:q.back()危纫,即最后被壓入隊列的元素。
判斷隊列空乌庶,如例:q.empty()叶摄,當隊列空時,返回true安拟。
訪問隊列中的元素個數(shù)蛤吓,如例:q.size()
3、priority_queue
在<queue>頭文件中糠赦,還定義了另一個非常有用的模板類priority_queue(優(yōu)先隊列)会傲。優(yōu)先隊
列與隊列的差別在于優(yōu)先隊列不是按照入隊的順序出隊,而是按照隊列中元素的優(yōu)先權順序
出隊(默認為大者優(yōu)先拙泽,也可以通過指定算子來指定自己的優(yōu)先順序)淌山。
priority_queue 模板類有三個模板參數(shù),第一個是元素類型顾瞻,第二個容器類型泼疑,第三個是比
較算子。其中后兩個都可以省略荷荤,默認容器為vector退渗,默認算子為less移稳,即小的往前排,大
的往后排(出隊時序列尾的元素出隊)
priority_queue q1;
priority_queue< pair > q2; // 注意在兩個尖括號之間一定要留空格会油。
priority_queue,greater > q3; //定義小的先出隊
priority_queue 的基本操作與queue 相同个粱。
初學者在使用priority_queue 時,最困難的可能就是如何定義比較算子了翻翩。
如果是基本數(shù)據(jù)類型都许,或已定義了比較運算符的類,可以直接用STL 的less 算子和greater
算子——默認為使用less 算子嫂冻,即小的往前排胶征,大的先出隊。
如果要定義自己的比較算子桨仿,方法有多種弧烤,這里介紹其中的一種:重載比較運算符。優(yōu)先隊
列試圖將兩個元素x 和y 代入比較運算符(對less 算子蹬敲,調(diào)用xy),
若結果為真莺戒,則x 排在y 前面伴嗡,y 將先于x 出隊,反之从铲,則將y 排在x 前面瘪校,x 將先出隊。