queue容器(c++)

一.queue模版類的定義在<queue>頭文件中。

queue與stack模版非常類似,queue模版也需要定義兩個模版參數,一個是元素類型,一個是容器類型,元素類型是必要的,容器類型是可選的,默認爲dqueue類型。

定義queue對象的示例代碼如下:

queue<int>q1;

queue<double>q2;

queue的基本操作有:

1.入隊:如q.push(x):將x元素接到隊列的末端;

2.出隊:如q.pop() 彈出隊列的第一個元素,並不會返回元素的值;

3,訪問隊首元素:如q.front()

4,訪問隊尾元素,如q.back();

5,訪問隊中的元素個數,如q.size();

二.優先隊列

在<queue>頭文件中,還定義了一個非常有用的模版類priority_queue(優先隊列),優先隊列與隊列的差別在於優先隊列不是按照入隊的順序出隊,而是按照隊列中元素的優先權順序出隊(默認爲大者優先,也可以通過指定算子來指定自己的優先順序)。

priority_queue模版類有三個模版參數,元素類型,容器類型,比較算子。其中後兩個都可以省略,默認容器爲vector,默認算子爲less,即小的往前排,大的往後排(出隊時序列尾的元素出隊)。

定義priority_queue對象的示例代碼如下:

priority_queue<int >q1;

priority_queue<pair<int,int> >q2;

priority_queue<int,vector<int>,greater<int> >q3;//定義小的先出隊

priority_queue的基本操作均與queue相同

 

複製代碼

/*(修理牧場)輸入一組數據得到最小權和*/
#include<iostream>
#include <cstdio>
#include <queue>    //隊列模板

using namespace std;

//priority_queue<int>q;  優先隊列  默認大的先出隊
priority_queue<int, vector<int>, greater<int> > q;  //優先隊列  定義小的先出隊

int main() {
    int n, m;
    cout<<"輸入數組長度n:";
    cin>>n;
    cout<<"輸入數據元素:";
    for( int i = 0; i < n; i++ ) {
        cin>>m;
        q.push( m );
    }

    int sum = 0;

    while( q.size() > 1 ) {
        int first = q.top();
        q.pop();

        int second = q.top();
        q.pop();

        sum += first + second;      
        q.push( first + second );  
    }

    cout<<"最小花費:"<<sum<<endl;

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章