带复制构造函数、赋值运算符的模板队列

来源:互联网 发布:阿里云网址是多少 编辑:程序博客网 时间:2024/06/08 01:09
#ifndef QUEUE_HPP#define QUEUE_HPP #include <assert.h>#include <stddef.h>template <typename T> class Queue;template <typename T>class Node{    friend class Queue<T>;    public:        Node(T data = 0, Node *next = NULL)            :data_(data), next_(next){}    private:    T data_;    Node *next_;};template <typename T>class Queue{    public:        typedef Node<T> *p_node;        Queue();        Queue(const Queue &other);        Queue &operator = (const Queue &other);        ~Queue();        void clear();        void enqueue(const T &data);        void dequeue(T &data);        bool isEmpty();        size_t size();    private:        p_node front_;        p_node rear_;        size_t size_;};template <typename T>inline Queue<T>::Queue()    :front_(NULL),     rear_(NULL),     size_(0){}template <typename T>inline Queue<T>::Queue(const Queue &other)    :front_(NULL),     rear_(NULL),     size_(0){    p_node p = other.front_;    while(p != NULL){        enqueue(p->data_);        p = p->next_;    }}template <typename T>inline Queue<T> &Queue<T>::operator = (const Queue &other){    if(this != &other){        clear();        p_node p = other.front_;        while(p != NULL){            enqueue(p->data_);            p = p->next_;        }    }     return *this;}template <typename T>inline Queue<T>::~Queue(){    clear();}template <typename T>inline void Queue<T>::clear(){    p_node p = front_, q = NULL;    while(p != NULL){        q = p;        delete p;        p = q->next_;    }    size_= 0;}template <typename T>inline void Queue<T>::enqueue(const T &data){    p_node newNode = new Node<T>(data, NULL);    if(isEmpty()){        front_ = rear_ = newNode;    }    else{        rear_->next_ = newNode;        rear_ = rear_->next_;    }    size_++;}template <typename T>inline void Queue<T>::dequeue(T &data){    assert(!isEmpty());    p_node p = front_;    front_ = front_->next_;    data = p->data_;    delete p;    size_--;}template <typename T>inline bool Queue<T>::isEmpty(){    return front_ == NULL;}template <typename T>inline size_t Queue<T>::size(){    return size_;}#endif  /*QUEUE_HPP*/

0 0
原创粉丝点击