我有一个名为Heap的类,它是指向HeapItem对象的指针的Vector
vector<HeapItem*> myHeap;
我想创建一个Heap的深层副本,以便我可以删除副本中的所有项目而不会影响原始堆 .
EX:
OriginalHeap = new Heap();
OriginalHeap.Insert(HeapItem1);
OriginalHeap.Insert(HeapItem2);
OriginalHeap.Insert(HeapItem3);
CopyHeap = OriginalHeap;
CopyHeap.deleteMin();
print(OriginalHeap);
print(CopyHeap);
输出:
OriginalHeap = HeapItem1,HeapItem2,HeapItem3
CopyHeap = HeapItem2,HeapItem3
1 回答
既然你引入了Heap类的概念,它是
vector<HeapItem*>
的包装器,你可以为这个类定义复制构造函数来处理所需的深度复制:克里斯指出的一个可能的修改是使用
HeapItem
的clone()
方法,如果前者是多态类 - 请参阅对此答案的评论 .此外,您可以定义复制分配(如果您希望能够将一个现有的
Heap
分配给另一个)并且您确定要定义析构函数以确保在Heap
对象的生命结束时正确释放内存 .您还可以将
Heap
定义为模板类,以便您能够使用HeapItem
类型对其进行参数化 .