Jos*_*hua 20 c++ linked-list copy-constructor
这是功课
我正在为我的C++类实现一个链表类,而复制构造函数对我来说非常困惑.
链表由称为Elems的结构组成:
struct Elem
{
int pri;
data info;
Elem * next;
};
Elem * head;
Run Code Online (Sandbox Code Playgroud)
info是一个单独的自定义类,存储在Elem中.
复制构造函数的签名是:
linkedList::linkedList( const linkedList &v )
Run Code Online (Sandbox Code Playgroud)
我遇到的问题主要是采用我的逻辑并实际将其编写为代码.
我的总体想法是:
这是一般的想法吗?
任何帮助都会很棒.记住,这是作业,所以请不要直接回答!
感谢您的时间
================================================== ================================================== ================================================== ==============
感谢大家的时间!
我想我已经弄清楚了:
//Copy Constructor
LinkedList::LinkedList( const LinkedList &v )
{
Elem * p1 = 0;//current
Elem * p2 = 0;//next
if( v.head == 0 )
head = 0;
else
{
head = new Elem;
head -> pri = v.head -> pri;
head -> info = v.head -> info;
p1 = head;
p2 = v.head -> next;
}
while( p2 )
{
p1 -> next = new Elem;
p1 = p1 -> next;
p1 -> pri = p2 -> pri;
p1 -> info = p2 -> info;
p2 = p2 -> next;
}
p1 -> next = 0;
}
Run Code Online (Sandbox Code Playgroud)
我很确定这很有效.我画了一些逻辑图片来帮助,我没有遇到任何问题.
Mic*_*eyn 22
您必须小心步骤1和步骤2的一部分.步骤1应该分配一个新节点并将其用作head.在第2步中next = v.next,除非您的意图是浅层复制,否则该部分是不正确的.
复制诸如链表之类的容器时,您可能需要深层复制,因此需要创建新节点并仅复制数据.在next与prior指针在新的列表中的节点应该是指你创建新的节点专为列表,而不是节点从原来的名单.这些新节点将具有来自原始列表的相应数据的副本,以便可以将新列表视为值或深度副本.
这是描绘浅层和深层复制之间差异的图片:

请注意,在图的深层复制部分中,没有节点指向旧列表中的节点.有关浅层和深层副本之间差异的更多信息,请参阅有关对象复制的Wikipedia文章.
| 归档时间: |
|
| 查看次数: |
45976 次 |
| 最近记录: |