【c++】【STL】queue详解

目录

queue的作用

queue是stl库提供的一种容器适配器,也就是我们数据结构中学到的队列,是非常常用的数据结构,特点是遵循LILO(last in last out,也就是后进后出)原则。

什么是容器适配器

stl中提供的类很多都叫容器,但有一些叫做容器适配器,容器适配器到底是啥呢?我们不妨先抛掉容器这两个字,先来谈谈适配器,适配器是软件设计之中的一种概念,即基于原有的接口设计适配出用户想要的接口,是一种设计模式,适配器这种设计模式提升了代码复用性以及系统扩展性,降低了代码的耦合度,是一种优秀的设计模式。那么对于容器适配器来说,就是利用已有的容器进行各种操作封装出新的类,这就叫容器适配器。

queue的接口

构造函数

cpp 复制代码
explicit queue (const container_type& ctnr = container_type());

一般来说不用给参数,直接调用默认构造就行。

empty

cpp 复制代码
bool empty() const;

队列的判空。

size

cpp 复制代码
size_type size() const;

返回队列的元素数。

front

cpp 复制代码
      value_type& front();
const value_type& front() const;

返回队列的第一个元素。

back

cpp 复制代码
      value_type& back();
const value_type& back() const;

返回队列的最后一个元素。

queue类的实现

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>

#include<deque>

using namespace std;

namespace jiunian
{
	template<class T, class container = deque<T>>
	class queue
	{
	public:
		typedef queue<T, container> Self;

		//queue()
		//{
		//}

		//queue(Self& x):
		//	con(x.con)
		//{
		//}

		//~queue()
		//{
		//}

		bool empty() const
		{
			return con.empty();
		}

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

		T& front()
		{
			return con.front();
		}

		const T& front() const
		{
			return con.front();
		}

		T& back()
		{
			return con.back();
		}

		const T& back() const
		{
			return con.back();
		}

		void push(const T& val)
		{
			con.push_back(val);
		}

		void pop()
		{
			con.pop_front();
		}

		void swap(Self& x)
		{
			con.swap(x.con);
		}

		Self operator=(Self& x)
		{
			con = x.con;
			return *this;
		}
	private:
		container con;
	};
}

queue作为一个容器适配器,实现起来相比其他容器明显简单了不少,因为其作为容器适配器只需要对其他容器的接口进行封装就行,不需要自己造轮子。实现过程一看就懂,不做过多赘述。

相关推荐
江屿风2 分钟前
【C++笔记】List流食般投喂
开发语言·c++·笔记·list
Lucis__3 小时前
基于Cache替换算法的LRU缓存实现
数据结构·c++·算法·缓存·lru
Cx330❀9 小时前
【MySQL基础】一文吃透“表的约束”:从 Null/Default 到主外键的终极安全法则
linux·服务器·数据库·c++·mysql·安全
c238569 小时前
第二篇:《测试指挥官:可视化单题自测框架(含 assert 实操)》
java·数据库·c++·算法·安全性测试
辞旧 lekkk10 小时前
【Redis初阶】常见数据类型
开发语言·数据库·c++·redis·学习·缓存·bootstrap
帅次10 小时前
Kotlin 与 Java 互操作:混合工程里的平台类型与 API 边界
java·开发语言·kotlin·suspend·nullable
dtq042412 小时前
C语言-结构体详解
c语言·开发语言·学习
梅雅达编程笔记12 小时前
编程启蒙|Scratch 转 Python 系列第9天:字典/哈希表积木双向对照(AI大模型参数配置表实战)
开发语言·人工智能·python·numpy·pandas
持力行12 小时前
C++与Java变量声明、定义及内存分配的核心区别
java·开发语言·c++
Rainy Blue88313 小时前
C转C++速成
c语言·c++·算法