queue容器

代码展示

#include<iostream>
#include<string>
#include<queue>
using namespace std;
class Person {
public:
	Person(string name, int age) {
		this->m_Name = name;
		this->m_Age = age;
	}
	string m_Name;
	int m_Age;
};
void test01() {
	queue<Person>q;
	Person p1("许应",48000);
	Person p2("元未央",40000);
	Person p3("缘七", 10000);
	Person p4("钟爷", 20000);
	
	q.push(p1);
	q.push(p2);
	q.push(p3);
	q.push(p4);
	while (!q.empty()) {
		cout << "队头———元素姓名为:" << q.front().m_Name
			<< "年龄:" << q.front().m_Age << endl;
		cout << "队尾———元素姓名为:" << q.back().m_Name
			<< "年龄:" << q.back().m_Age << endl;
		cout << "队大小" << q.size() << endl;
		q.pop();
		
	}
	cout << endl;
	
}
int main() {
	test01();
	system("pause");
	return 0;
}

1. 容器的创建

在C++中,queue是一个容器适配器,它基于其他容器(如dequelist)构建

默认情况下,queue使用deque作为底层容器,这是因为deque支持快速的头尾操作,非常适合实现队列这种先进先出(FIFO, First In First Out)的数据结构

#include <queue>
using namespace std;

queue<Person> q;

上述代码中,我们包含了<queue>头文件,并声明了一个名为qqueue<Person>类型的对象。这里Person是我们自定义的一个类,用于存储人的姓名和年龄信息。由于queue是模板类,因此可以用来存储任意类型的数据。

2. 数据结构形式

queue是一种线性数据结构,它遵循FIFO原则,即最早插入的元素最先被移除。在queue中,只能在一端(队尾)添加新元素,在另一端(队首)移除元素

这意味着:

  • 入队(Enqueue):在队尾插入一个新元素。
  • 出队(Dequeue):从队首移除一个元素。

为了实现这些功能,queue内部依赖于某种底层容器来实际存储元素。正如前面提到,默认情况下queue使用的是deque,但也可以选择list作为底层容器

需要注意的是,vector不适用于queue,因为它缺少必要的pop_front操作

3. 常用操作

插入元素

使用push方法可以在队尾插入一个新的Person对象:

q.push(p1);
q.push(p2);
q.push(p3);
q.push(p4);

每当我们调用push时,新的Person实例就会被添加到队列的末尾。

访问元素

虽然不能直接遍历整个队列,但我们可以通过front()访问队首元素,通过back()访问队尾元素:

cout << "队头———元素姓名为:" << q.front().m_Name
     << "年龄:" << q.front().m_Age << endl;
cout << "队尾———元素姓名为:" << q.back().m_Name
     << "年龄:" << q.back().m_Age << endl;

请注意,这里我们直接调用了成员变量m_Namem_Age,这要求Person类中的这些成员必须是公有的。如果希望保持封装性,则应提供适当的getter方法

删除元素

当需要移除队首元素时,可以使用pop()方法:

q.pop();

值得注意的是,pop()不会返回任何值;如果我们想获取并移除队首元素,应该先调用front()读取该元素,然后再调用pop()将其移除。

检查队列状态

还可以检查队列是否为空以及队列中的元素数量:

while (!q.empty()) {
    // ...
    cout << "队大小" << q.size() << endl;
}

这里的empty()函数用于判断队列是否为空,而size()则返回当前队列中元素的数量

综上所述,queue容器提供了简单而高效的接口来处理那些需要按照特定顺序访问和操作元素的场景。通过理解其工作原理及如何正确地使用它所提供的成员函数,我们可以更好地利用这一强大的工具来简化编程任务。此外,了解queue背后所依赖的具体实现(如deque),也有助于优化程序性能,尤其是在处理大量数据的情况下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值