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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM