深拷贝(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 }
posted on 2015-08-11 20:53  yanhh  阅读(2272)  评论(2编辑  收藏  举报