列表中的数据结构

时间:2015-04-11 09:48:43

标签: c++ list

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)的函数中存在问题,我在评论中写了问题。

即我不明白数据被复制两次意味着什么,最重要的是如何解决这个问题,以至于没有人说这个代码数据会被复制两次。

1 个答案:

答案 0 :(得分:0)

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

然后,当您指定temp->data = data;时,会制作第二份副本。 这就是为什么你被告知你的代码数据被复制两次。

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

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

void add_at_beginning(const type& data)

然后只会制作一份副本。