queue 模板类的定义在头文件中。与stack 模板类很相似
queue 的基本操作有:
入队,如例:q.push(x); 将x 接到队列的末端。
出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问队首元素,如例:q.front(),即最早被压入队列的元素。
访问队尾元素,如例:q.back(),即最后被压入队列的元素。
判断队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()
#include <iostream>
using namespace std;
#include <queue>//队列模型需要包含队列模型的头文件queue
//队列模型是从尾部进头部出 先进先出
//队列中基本数据类型
void main61()
{
queue<int> q;
q.push(1);
q.push(2);
q.push(3);
cout << "队头元素:" << q.front() << endl;
cout << "队列的大小" << q.size() << endl;
while (!q.empty())
{
cout << q.front() << " ";
q.pop();
}
}
class teacher
{
public:
int age;
char *name;
teacher(int _age, char *_name)
{
age = _age;
name = _name;
}
void print()
{
cout << "age:" << age << " name:" << name << endl;
}
};
void main62()
{
teacher t1(22, "Christine22"), t2(23, "Christine23"), t3(24, "Christine24");
queue<teacher> q;//存对象元素
q.push(t1);
q.push(t2);
q.push(t3);
while (!q.empty())
{
q.front().print();//q.front()返回的是元素的引用,所以可以调用类的成员函数
q.pop();
}
}
void main63()
{
teacher t1(22, "Christine22"), t2(23, "Christine23"), t3(24, "Christine24");
queue<teacher *> q;//存指针元素
q.push(&t1);
q.push(&t2);
q.push(&t3);
while (!q.empty())
{
teacher *tmp = q.front();
tmp->print();
q.pop();
}
}
priority_queue优先队列集合,可以按照需求指定集合以从大到小或者从小到大排列
#include <iostream>
using namespace std;
#include "queue"//优先队列集合
#include <functional>//使用greater从大到小优先顺序时,需要包含functional文件头
void main81()
{
priority_queue<int> p1; //默认是 最大值优先级队列 从大到小
//priority_queue<int, vector<int>, less<int> > p1; //上一行p1定义相当于这样写
priority_queue<int, vector<int>, greater<int> > p2; //最小值优先级队列 从小到大
p1.push(33);
p1.push(11);
p1.push(55);
p1.push(22);
cout <<"队列大小" << p1.size() << endl;
cout <<"队头" << p1.top() << endl;
while (p1.size() > 0)
{
cout << p1.top() << " ";
p1.pop();
}
cout << endl;
cout << "测试 最小值优先级队列" << endl;
p2.push(33);
p2.push(11);
p2.push(55);
p2.push(22);
while (p2.size() > 0)
{
cout << p2.top() << " ";
p2.pop();
}
}