【发布时间】:2014-03-17 19:15:04
【问题描述】:
好的,所以我正在编写一个 Node 类,它是元素类型的容器。我应该编写一个复制构造函数来遍历节点类的链接并复制每个节点。
对于 Node 类,唯一的变量是一个 Element(包含的数据)和一个指向下一个节点的指针,如果没有下一个节点,它将指向 nullptr。
我知道我需要制作一个“深度”副本并为每个指向的节点创建新节点。
我所拥有的是这样的:
Node::Node(const Node& rhs)
{
ele(the element) = rhs.ele;
next = rhs.next;
Node cur = Node(ele);
cur.next = next;
while(cur.next != nullptr)
{
Node* n = new Node(cur.ele);
(*n).next = cur.next;
cur = *(cur.next);
}
return *this;
}
显然这根本行不通。据我了解,为了保留副本,我需要将新节点存储在堆上并继续分配新节点,直到我命中 nullptr,但我不确定如何准确实现这一点。谢谢!
【问题讨论】:
-
分离
Node和List的类(你的单个元素和它们的容器)。 -
您应该使用 std::list 或 std::vector 容器类。如果您可能想查看 C++ STL 的源代码并了解它是如何实现的以及如何使用 std::allocator 进行内存管理。
标签: c++ linked-list copy-constructor