2013-02-12 132 views
-5
template <class T> 
Stack<T>::Stack(const Stack<T>& otherStack) 
{ 
     List<T> the=otherStack.list; 
     ListItem<T> *temp=the.getHead(); 
     while(temp!=NULL) 
     { 
       push(temp->value); 
       temp=temp->next; 
     } 
} 

我正在使用鏈表創建堆棧,而我的複製構造函數不起作用。請有人幫忙。使用鏈接列表複製堆棧的構造函數

List<T>拷貝構造函數的定義爲:

template <class T> 
List<T>::List(const List<T>& otherList) 
{ 
    head=NULL; 
    ListItem<T> *temp=otherList.head; 

    while (temp!=NULL) 
    { 
     insertAtTail(temp->value); 
     temp=temp->next; 
    } 
} 
+6

**什麼**不起作用?我的意思是:你怎麼知道它不工作?意外的結果?崩潰?編譯錯誤?咖啡空了? – leemes 2013-02-12 13:33:33

+0

另外,Stack的定義是什麼? – 2013-02-12 13:33:59

+0

它以什麼方式不起作用? – 2013-02-12 13:34:04

回答

0

假設listStack的唯一成員(因爲它是足夠了),而且List已經實現了一個正確的拷貝構造函數,你當前正在複製第一個作業的列表:

template <class T> 
Stack<T>::Stack(const Stack<T>& otherStack) 
{ 
     List<T> the=otherStack.list;  // <-- list is copied 
     ListItem<T> *temp=the.getHead(); 
     while(temp!=NULL) 
     { 
       push(temp->value); 
       temp=temp->next; 
     } 
} 

在完成整個列表的副本之後,您將該副本的元素推送到您的堆棧中。但是,僅僅複製列表到成員list(或更好地說:與otherStack列表初始化list)足以複製整個堆棧:

template <class T> 
Stack<T>::Stack(const Stack<T>& otherStack) : 
    list (otherStack.list) // <--- list is copied 
{ 
} 

這很可能會只是「移動」這個問題的複製構造List

+0

它仍然顯示零標記 – user2064907 2013-02-12 13:46:36

+0

我不知道如何顯示您的數據結構。請提供「List」副本的代碼,因爲問題很可能在那裏。 – leemes 2013-02-12 13:47:22

+0

template List :: List(const List &otherList) { head = NULL; ListItem * temp = otherList.head; while(temp!= NULL) { insertAtTail(temp-> value); temp = temp-> next; } } – user2064907 2013-02-12 13:52:40

-1

代碼片段不足以識別問題。 例如行:

List<T> the=otherStack.list; 

使得列表的副本,如果鏈表實現自定義也許它的拷貝構造函數有問題。 儘量

List<T> &the=otherStack.list; 
+1

如果'List'有問題,'Stack'不應該在他們周圍工作。他應該修復'List'的問題,並使用列表的副本來構建堆棧的副本。 – leemes 2013-02-12 13:45:10

+0

謝謝大家,我的問題解決了:) thnx爲你的幫助 – user2064907 2013-02-12 14:36:11

1

如果ListStack有自己的常用語義,構造函數逆轉構造的對象項目的順序。因此,您應該以相反的順序遍歷列表,或者執行兩次這樣的複製以恢復原始順序。這也有可能是List可以只是複製與賦值操作符和

this.list = otherStack.list 

就足夠了。但沒有看到List代碼,我不知道。

+0

謝謝大家,我的問題解決了:) thnx爲你提供幫助 – user2064907 2013-02-12 14:35:20