C++模拟实现队列

本文介绍了队列的基本概念,它是一种FIFO(先进先出)的数据结构。队列通过容器适配器的方式实现,允许在队尾插入元素,队头删除元素。默认底层容器为deque,但也支持list。文章详细讲解了如何使用队列,并提供了使用list和deque模拟实现队列的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 队列的介绍
queue的文档介绍
翻译:

  1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。
  2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。
  3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:
    empty:检测队列是否为空
    size:返回队列中有效元素的个数
    front:返回队头元素的引用
    back:返回队尾元素的引用
    push_back:在队列尾部入队列
    pop_front:在队列头部出队列
  4. 标准容器类deque和list满足了这些要求。默认情况下,如果没有为queue实例化指定容器类,则使用标准容器deque。
    在这里插入图片描述

2.队列的使用
在这里插入图片描述
3.模拟实现队列

  1. 用list封装一个队列
//用list模拟实现队列
#include<iostream>
#include<list>
using namespace std;
template <class T>
class Queue
{
public:
	void push(const T& val)
	{
		q.push_back(val);
		//q.push_front(val);
	}

	void pop()
	{
		q.pop_front();
		//q.pop_back();
	}

	T& front()
	{
		return q.front();
		//retuen q.back();
	}

	size_t size() const
	{
		return q.size();
	}

	bool empty() const
	{
		return q.empty();
	}
private:
	list<T> q;
};

void test()
{
	queue<int> q;
	q.push(1);
	q.push(2);
	q.push(3);
	q.push(4);
	cout << q.size() << endl;
	while (!q.empty())
	{
		cout << q.front() << " ";
		q.pop();
	}
	cout << endl;
	cout << q.size() << endl;
}
int main()
{
	test();
	return 0;
}
  1. 使用双端队列实现对列
//默认使用双端对列实现队列
#include<list>
#include<stack>
#include<iostream>
#include<vector>
#include<deque>
using namespace std;
//size,empty,back,front,push_back,pop_front
template<class T,class Container=deque<T>>
class Queue
{
public:
	void push(const T& val)
	{
		_c.push_back(val);
	}
	void pop()
	{
		_c.pop_front();
	}
	T& front()
	{
		return _c.front();
	}
	T& back()
	{
		return _c.back();
	}
	size_t size() const
	{
		return _c.size();
	}
	bool empty() const
	{
		return _c.empty();
	}
private:
	Container _c;
};

void test()
{
	Queue<int> q;
	//vector不能实现队列,没有pop_front接口
	//Queue<int, list<int>> q;
	q.push(1);
	q.push(2);
	q.push(3);
	q.push(4);
	q.push(5);
	while (!q.empty())
	{
		cout << q.front() << " ";
		q.pop();
	}
	cout << endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值