2013-02-06 93 views
2

所以我使用動態堆棧,我想寫一個複製構造函數,它必須從同一個類的另一個實例複製堆棧的數據。我試圖編寫這個函數,但看起來很難。有人能幫我一把嗎?如何複製堆棧?

template<typename T=int> 
class LStack 
{ 
public: 

    template<typename U=int> 
    struct elem 
    { 
     U con; 
     elem<U>* link; 
    } 

private: 

    elem<T>* el; 

    void Copystack(Lstack const& stack) // HERE 
    { 
     elem<T>* last = el; 
     el->con = stack->con; 
     while(stack->link != null) 
     { 
      var temp = new elem<T>; 
      temp->con = stack->con; 
      temp->link = stack->link; 
      stack = stack->link; 
     } 
    } 

}; 
+0

這可能是一個重複的問題:http://stackoverflow.com/questions/8948795/assign-values-of-a-stack-to-another-stack 祝你好運! –

+0

您是否試圖將元素從先入先出複製到後進入或從後進入到先入? – Beta

+0

它必須以相同的順序 –

回答

4

的STL容器適配器std::stack有賦值operator=,讓您如果需要做手工做的正是

#include <stack> 

int main() 
{ 
    std::stack<int> s1; 
    std::stack<int> s2; 
    s1 = s2; 
} 

,您可以使用@ FredOverflow的遞歸解決方案,或者你可以做它帶有兩個迴路和一個臨時堆棧,這個回收版本保留在堆棧框架上(雙關語意)。

void copy_reverse(Stack& source, Stack& dest) 
{ 
    while(!source.empty()) 
     dest.push(Element(source.top())); 
     source.pop(); 
    } 
} 

Stack src, tmp, dst; 
copy_reverse(src, tmp); 
copy_reverse(tmp, dst); 
+0

我需要手動進行 –

+0

這是作業。 –