閱讀465 返回首頁    go 阿裏雲 go 技術社區[雲棲]


deque queue and priority_queue

deque queue and priority_queue

stl-deque

deque 是雙端隊列,可實現棧與隊列的操作。

deque支持deque_ob[i] 形式的隨機存取。


stl-queue

queue的基本操作有:
入隊,如例:q.push(x); 將x 接到隊列的末端。
出隊,如例:q.pop(); 彈出隊列的第一個元素,注意,並不會返回被彈出元素的值。
訪問隊首元素,如例:q.front(),即最早被壓入隊列的元素。
訪問隊尾元素,如例:q.back(),即最後被壓入隊列的元素。
判斷隊列空,如例:q.empty(),當隊列空時,返回true。

查詢當前容量,如例:q.size();

微笑不支持[i]下標隨機訪問和clear()函數。


stl-priority_queue

普通的隊列是一種先進先出的數據結構,元素在隊尾進隊而從隊頭出隊。在優先隊列中,元素被賦予優先級,最大(或最小)的元素在隊頭。

對於自定義的結構體,重載'<'(小於號)就會保證隊頭元素當前最大,即降序排序。這與sort剛好相反。

頭文件為<queue>。此類沒有clear()成員函數,隻能逐個pop()

常用的操作如下: 
empty()  如果優先隊列為空,則返回真  
pop()  刪除第一個元素  
push()  加入一個元素  
size()  返回優先隊列中擁有的元素的個數  
top()  返回優先隊列中有最高優先級的元素

#include<iostream>
#include<queue>
using namespace std;
int main(){
    priority_queue<int ,vector<int>,greater<int>> q;
    q.push(3);q.push(1);q.push(2);
    for(;!q.empty();q.pop()) cout<<q.top();
    cout<<endl;
    {
        priority_queue<int ,vector<int>> q;
        q.push(3);q.push(1);q.push(2);
        for(;!q.empty();q.pop()) cout<<q.top();
    }//此對括號作用域內的q不會與上麵的q衝突
    return 0;
}
/*下麵是priority_queue的定義
template<typename _Tp, typename _Sequence = vector<_Tp>,
	   typename _Compare  = less<typename _Sequence::value_type> >
    class priority_queue{};
*/
/*123
321
Process returned 0 (0x0)   execution time : 0.124 s
Press any key to continue.
*/


最後更新:2017-04-03 12:56:01

  上一篇:go stl-vector
  下一篇:go 查找與散列(Hash)