2017-04-11 116 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)'。 –