列表中的数据结构

Data structure in List

本文关键字:数据结构 列表      更新时间:2023-10-16
template <class type> class list
{
private:
    struct element
    {
        type data;
        element* prev;
        element* next;
    };
    element* begin;
    element* end;
    int size;
public:
    list()
    {
        begin = NULL;
        end = NULL;
        size = 0;
    }
    // data is copied twice. (why? how to solve it?)
    void add_at_beginning(type data) 
    {
        element* temp = new element;
        temp->next = NULL;
        temp->prev = NULL;
        temp->data = data;
        if (size == 0)
        {
            begin = end = temp;
            size++;
        }
        else
        {
            temp->next = begin;
            begin->prev = temp;
            begin = temp;
            size++;
        }
    }
};

在名为void add_at_beginning(type data)有问题的函数中,我将问题写在注释中。

也就是说,我不明白说数据被复制两次是什么意思,最重要的是我如何解决这个问题,以便没有人说在这个代码中数据被复制两次。

您的函数void add_at_beginning(type data)按值获取其数据参数,这意味着当您调用该函数时,会创建数据的副本。

然后,当您分配temp->data = data; 时,将创建第二个副本。这就是为什么你被告知在你的代码中数据被复制两次。

您可以通过引用数据参数来避免其中一个副本。如果您的类与大型类型一起使用,这可能会带来一些性能改进。

如果将函数的原型更改为:

void add_at_beginning(const type& data)

然后只会制作一份副本。