使复制构造函数对ADT队列更加灵活

时间:2015-05-15 08:00:21

标签: c++ copy-constructor

我为ADT队列构建了一个复制构造函数。复制构造函数工作正常。我想改进我的代码,但我真的不知道如何缩短代码以使其更灵活。代码如下:

template <typename T>
Queue <T>::Queue(const Queue & other)
{
    if (other.first == nullptr)
    {
        first = nullptr;
        nrOfElements = 0;
    }

   else
   {
    Node* saveFirst;
    Node* walker;
    first = other.first;
    walker = new Node(first->data);
    saveFirst = walker;
    while (first->next != nullptr)
    {
        walker->next = new Node(first->next->data);
        walker = walker->next;
        first = first->next;
    }
    walker->next = nullptr;
    first = saveFirst;
    }
this->nrOfElements = other.nrOfElements;
}

Queue还包含一个内部私有Node类,其中包含指针firstnext等:

private:
    int nrOfElements;
    class Node
    {
    public:
        Node* next;
        T data;
        Node(T data)
        {
            this->data = data;
        }
    };
    Node* first;

所以,我很感激任何关于如何改进上面的复制构造函数代码的建议/示例,因为我在任务上有点丢失。

1 个答案:

答案 0 :(得分:0)

试试这个 可能比你的代码更容易

template <typename T>
Queue <T>::Queue(const Queue & other)
{
 Front =NULL;Rear=NULL;Count=0;
    Node *p= other.Front;
    while(p!=NULL){
        EnQueue(p->GetData());
        Rear->SetData(p->GetData());
        p=p->next;
    }
}

首先我们将NULL值设置为Front&amp;后面和0表示计数秒使新节点从旧队列中的每个节点获取数据并将其复制到新队列。