C++面试八股-STL(queue)

1.简介

queue(队列)在stl里面不是一个基础的容器(container),而是一个适配器(adapter),一般是封装了其他的基础容器作为存储基础。在stl里面,stl::queue是基于stl:deque双端队列来实现的,不过根据queue先进先出以及首尾快速存取的数据结构特点,也可以基于list进行实现,而不推荐vector之类的数组实现——因为在vector头部的插入或者删除速度过慢。根据STL之queue容器详解_std::queue-CSDN博客 这篇文章的介绍,可以看到stl里面常见的基本容器的一些特点。

2.基于list实现的queue

基于list实现的queue比较简单,所有的push、pop之类的操作都可以看做是对list的对应操作的进一步封装使用。

#include "MyList.h" //可以改为stl的list

template<typename T>
class Myqueue
{
public:
	Myqueue() {};

	Myqueue(const MyList<T>& _list)
		: container(_list)
	{};

	~Myqueue() {};

	bool empty()
	{
		return container.empty();
	}

	size_t size()
	{
		return container.size();
	}


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

	T& pop()
	{
		T front_val = container.front();
		container.pop_front();
		return front_val;
	}

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

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

private:
	MyList<T> container;
};
3.基于deque实现的queue

deque的介绍可以看这篇blog:C++中STL容器之双端队列——dequeue_c++ dequeue-CSDN博客简而言之是一种不连续的分块的、支持随机访问的、使用map存储各内存块首地址的线性存储结构,同时保证了块与块之间的顺序。

基于deque实现的queue在语法上与基于list实现的queue没有区别,只是容器类型从list变成了deque。

#include <deque>
template<typename T>
class MyQueue // 基于dequeue实现
{
public:
	MyQueue() {};
	~MyQueue() {};
	bool empty()
	{
		return container.empty();
	}
	size_t size()
	{
		return container.size();
	}
	void push(const T& val = T())
	{
		container.push_back(val);
	}
	T& pop()
	{
		T front_val = container.front();
		container.pop_front();
		return front_val;
	}	
	T& front()
	{
		return container.front();
	}
	T& back()
	{
		return container.back();
	}

private:
	std::deque<T> container;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值