C++数据结构 之 队列_Queue

C++数据结构 之 队列_Queue

源代码只包含头文件

注:需要C++11的支持

一、队列

队列的思想和现实中排队是一模一样:先进先出。

它支持如下几个操作:
1、push (入队列):将元素从队列的末尾压入队列。
2、pop (出队列):将元素从队列的首位从元素取出。
3、front 返回最首位的元素,但是不出队列。
4、back 返回最末尾的元素,但是不出队列。

示意图:
队列

二、源代码:

#ifndef QUEUE_H
#define QUEUE_H

#include <deque>

using std::deque;
using std::move;

template<typename T, typename Container = deque<T>>
class Queue {
public:
	typedef typename Container::value_type      value_type;
	typedef typename Container::reference       reference;
	typedef typename Container::const_reference const_reference;
	typedef typename Container::size_type       size_type;

protected:
	Container c;

public:
	Queue() = default;
	Queue(const Queue &s) : c(s.c){}
	Queue(Queue &&s) : c(move(s.c)){}
	Queue& operator=(const Queue &s) {
		c = s.c;
		return *this;
	}
	~Queue() = default;

	bool empty() const             { return c.empty(); }
	size_type size() const         { return c.size(); }
	void push(const value_type &x) { c.push_back(x); }
	void push(value_type &&x)      { c.push_back(move(x)); }
	void pop()                     { c.pop_front();; }
	reference front()              { return (c.front()); }
	const_reference front() const  { return (c.front()); }
	reference back()               { return (c.back()); }
	const_reference back() const   { return (c.back()); }
	void swap(Queue &s)            { std::swap(c, s.c); }
	template <typename... Args>
	void emplace(Args&& ... args) {
		c.emplace_back(forward<Args>(args)...);
	}
};

#endif // !QUEUE_H

注解:
本队列是基于deque(双端队列)实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值