深拷貝(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 }
