使复制构造函数更灵活,可为ADT队列

Making a copy constructor more flexible for ADT queue

本文关键字:可为 ADT 队列 复制 构造函数      更新时间:2023-10-16

我已经为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;

因此,我将感谢有关如何改进复制构造代码的任何建议/示例,因为我对任务有些丢失。

尝试这个可能比您的代码容易

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;
    }
}

首先,我们将零值设置为正面&amp;后方和0为第二个新节点以获取旧队列中每个节点的数据,然后将其复制到新队列。