c++中的queue队列以及priority_queue优先级队列

本文介绍了C++中的queue队列基本操作,包括入队、出队、访问队首和队尾元素、判断队列空以及获取元素个数。同时提到了priority_queue优先级队列,该队列可以根据设定的顺序进行排列。

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();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值