2017-04-11 85 views
0

我在栈上有这种反转方法,它将栈内的元素反转为tmpStack。我想知道如何将tmpStack分配给我的原始堆栈。我没有找到一种方法将原始堆栈分配给该值,以便在使用print时显示,而不仅仅是打印tmpStack。我的问题在最后一行。反向堆栈元素C++

template<class T> 
void stack<T>::reverse(){ 

    T item; 
    stack<T> tmpStack; 

    while (empty() == false) 
    { 
     item = stack<T>::pop(); 
     tmpStack.push(item); 
    } 


    stack<T> = tmpStack; 


} 
+0

为什么不反转当前栈中的*元素?例如:for(int i = 0; i

回答

0

假设你operator=工作正常:

*this = tmpStack; 

编辑:

至于托比暗示正确:由于C++ 11,更好的办法是

*this = std::move(tmpStack); 

区别:在你的具体情况下,n一个,因为你不提供一个移动赋值操作符。但如果你这样做,后者将被调用。

Stack& operator=(Stack&& other) 
{ 
    // You do not copy the data any more here, but SWAP! 
    // Swapping assures that, if *this has data allocated 
    // other will clean it up correctly for you. 
} 

有了这样的赋值操作符(和appopriate移动构造函数,关键字rule of five),你当你保存数据分配和破坏的一个步骤(移动,而不是复印件)获得更高效的代码。

+0

完美谢谢! –

+1

如果你有一个工作的移动赋值运算符,通常最好使用'* this = std :: move(tmpStack)'。 –