手写C++ Queue,参考QQueue
分为双端队列和单端队列,单端队列继承自双端队列
类声明
双端
template<typename T>
class Queue : public ContainerBase
{
public:
explicit Queue() noexcept;
Queue(const Queue&t)noexcept;
Queue(Queue&&t)noexcept;
Queue& operator= (const Queue& t)noexcept;
Queue& operator= (Queue&& t)noexcept;
~Queue();
bool isEmpty()const noexcept {
return m_size == 0; };
uint size()const noexcept {
return m_size; };
Queue& pushBack(const T& t)noexcept;
Queue& pushBack(T&& t)noexcept;
Queue& pushFront(const T& t)noexcept;
Queue& pushFront(T&& t)noexcept;
T popBack();
T popFront();
T& head();
T& tail();
const T& at(int pos);
void clear()noexcept;
protected:
template<typename T>
struct Node
{
T data;
Node* next = nullptr;
Node * previous = nullptr;
};
using NodeT = Node<T>;
NodeT * m_head;
NodeT * m_tail;
uint m_size;
void _throw(bool v)const
{
if (v)
throw std::out_of_range("Queue request out of range");
}
};
单端
template<typename T>
class SQueue : public Queue<T>
{
public:
SQueue() = default;
~SQueue() = default;
SQueue& enqueue(const T& t)noexcept;
T dequeue(