2013-02-06 89 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

这是作业。 –