C++从青铜到王者第十五篇:STL之queue类的初识和模拟实现

Posted 森明帮大于黑虎帮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++从青铜到王者第十五篇:STL之queue类的初识和模拟实现相关的知识,希望对你有一定的参考价值。

在这里插入图片描述

系列文章目录



前言


一、queue的介绍和使用

1.queue的介绍

queue的文档

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

2.queue的使用

在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS   1
#include<iostream>
#include<queue>
using namespace std;
int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	cout << q1.front() << endl;
	cout << q1.back() << endl;
	cout << q1.size() << endl;
	while (!q1.empty())
	{
		cout << q1.front() << " ";
		q1.pop();
	}
	cout << endl;
	cout << q1.size() << endl;
	cout << q1.empty() << endl;
	return 0;

}

在这里插入图片描述

二、queue的模拟实现

因为queue的接口中存在头删和尾插,因此使用vector来封装效率太低,故可以借助list来模拟实现queue,具体如下:

#include<iostream>
#include<vector>
#include<list>
namespace yyw
{
	template<class T,class Container>
	class queue   //队尾入,队头出
	{
	public:
		void push(const T& x)
		{
			_con.push_back(x);
		}
		void pop()
		{
			_con.pop_front();
		}
		T& front()
		{
			return _con.front();
		}
		T& back()
		{
			return _con.back();
		}
		size_t size()
		{
			return _con.size();
		}
		bool empty()
		{
			return _con.empty();
		}
	private:
		Container _con;
	};
	void testqueue1()
	{
		queue<int, std::list<int>> q1;
		q1.push(1);
		q1.push(2);
		q1.push(3);
		q1.push(4);
		std::cout << q1.size() << std::endl;
		std::cout << q1.empty() << std::endl;
		while (!q1.empty())
		{
			std::cout << q1.front() << " ";
			q1.pop();
		}
		std::cout << std::endl;
	}
}

在这里插入图片描述


总结

以上就是今天要讲的内容,本文仅仅简单介绍了queue的使用和模拟实现,而queue提供了大量能使我们快速便捷地处理数据的函数和方法,非常的便捷所以我们务必掌握。另外如果上述有任何问题,请懂哥指教,不过没关系,主要是自己能坚持,更希望有一起学习的同学可以帮我指正,但是如果可以请温柔一点跟我讲,爱与和平是永远的主题,爱各位了。
在这里插入图片描述

以上是关于C++从青铜到王者第十五篇:STL之queue类的初识和模拟实现的主要内容,如果未能解决你的问题,请参考以下文章

C++从青铜到王者第十篇:STL之vector类的模拟实现

C++从青铜到王者第十一篇:STL之list类的初识

C++从青铜到王者第十三篇:STL之list类的模拟实现

C++从青铜到王者第十四篇:STL之stack类的初识和模拟实现

Love2d从青铜到王者第十五篇:Love2d之角度和距离(Angles and distance)

Lua从青铜到王者基础篇第十五篇:Lua 面向对象