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(双端队列)实现的。