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)
的函数中存在问题,我在评论中写了问题。
即我不明白数据被复制两次意味着什么,最重要的是如何解决这个问题,以至于没有人说这个代码数据会被复制两次。
答案 0 :(得分:0)
您的函数void add_at_beginning(type data)
按值获取其数据参数,这意味着当您调用该函数时,会生成一份数据副本。
然后,当您指定temp->data = data;
时,会制作第二份副本。
这就是为什么你被告知你的代码数据被复制两次。
您可以通过引用获取数据参数来避免其中一个副本。如果您的类与大型类型一起使用,这可能会带来一些性能提升。
如果您将函数的原型更改为:
void add_at_beginning(const type& data)
然后只会制作一份副本。