深拷贝(deep-copy),区别于浅拷贝,表示复制所有数据,而不是像浅拷贝一般只复制指针。深拷贝的数据不会因原始数据被delete后而消失。
单链式结构可以实现单链表,栈,队列,树等数据结构。掌握了单链式结构的深拷贝,实现其它数据结构的深拷贝就易如反掌了。
单链式结构是这样的:
1 template <class value> 2 struct node { 3 value val; 4 node *next = nullptr; 5 };
定义并初始化list1:
1 typedef node<int> in; 2 in *list1 = new in; 3 // do something 4 // do something else
然后我们又定义了一个单链表list2:
1 in *list2;
深拷贝的实现:
1 template <class value> 2 void sldc(node<value> **dst, const node<value> *src) { // single list deep copy 3 while (*dst) { // clear 4 auto **tmp = &(*dst)->next; 5 delete tmp; 6 dst = tmp; 7 } 8 *dst = nullptr; 9 10 for (; src; src = src->next, dst = &(*dst)->next) { 11 *dst = new in; 12 (*dst)->val = src->val; 13 } 14 }