上一篇文章介紹了先進后出的stack容器,對應著先進后出還有一種先進先出的容器叫queue容器 。
1、queue容器的基本概念
Queue是一種先進先出(First In First Out,FIFO)的數據結構,它有兩個出口,queue容器允許從一端新增元素,從另一端移除元素。
2、queue容器的特點
Queue所有元素的進出都必須符合”先進先出”的條件,只有queue的頂端元素,才有機會被外界取用。
Queue不提供遍歷功能,也不提供迭代器。
3、queue常用API介紹
3.1queue構造函數
queue<T> queT;//queue采用模板類實現,queue對象的默認構造形式: queue(const queue &que);//拷貝構造函數
3.2queue存取、插入和刪除操作
push(elem);//往隊尾添加元素 pop();//從隊頭移除第一個元素 back();//返回最后一個元素 front();//返回第一個元素
3.3queue賦值操作
queue& operator=(const queue &que);//重載等號操作符
3.4queue大小操作
empty();//判斷隊列是否為空 size();//返回隊列的大小
案例:
#include<iostream>#include <queue> //隊列模板
using namespace std;void test(){
queue<int> q;
q.push(10);
q.push(20);
q.push(30);
q.push(40);
q.push(50);
if(q.empty())
{
cout<<"空隊"<<endl;
}
else
{
cout<<"隊的元素個數:"<<q.size()<<endl;
while(!q.empty())//隊不為空 我就訪問隊頭元素
{
cout<<q.front()<<" ";
q.pop();//出隊 一個數據
}
}
}int main() {
test() ;
return 0;}
4、優先隊列priority_queue
在頭文件中,還定義了一個非常有用的模版類priority_queue(優先隊列),優先隊列與隊列的差別在于優先隊列不是按照入隊的順序出隊,而是按照隊列中元素的優先權順序出隊(默認為大者優先,也可以通過指定算子來指定自己的優先順序)。
priority_queue模版類有三個模版參數,元素類型,容器類型,比較算子。其中后兩個都可以省略,默認容器為vector,默認算子為less,即小的往前排,大的往后排(出隊時序列尾的元素出隊)。
定義方式:
priority_queue<int >q1;//優先隊列 默認大的先出隊
priority_queue<pair<int,int> >q2;
priority_queue<int,vector<int>,greater<int> >q3;//定義小的先出隊
案例:給定幾個坐標(x,y,z),按照優先輸出z坐標大的。
#include<iostream>
#include<queue>
#include<stdlib.h>
using namespace std;
class T
{
public:
int x,y,z;
T(int a,int b,int c):x(a),y(b),z(c)
{
}
};
bool operator<(const T&t1,const T&t2)
{
return t1.z<t2.z;
}
int main(void)
{
priority_queue<T>q;
q.push(T(4,4,3));
q.push(T(2,2,5));
q.push(T(1,5,4));
q.push(T(3,3,6));
while(!q.empty())
{
T t=q.top();
q.pop();
cout<<t.x<<" "<<t.y<<" "<<t.z<<endl;
}
system("Pause");
return 1;
}
更多關于智能物聯網培訓的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓服務經驗,采用全程面授高品質、高體驗培養模式,擁有國內一體化教學管理及學員服務,助力更多學員實現高薪夢想。