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