2017-04-11 11 views
0

スタック内の要素をtmpStackに逆転させるこの逆の方法がスタックにあります。元のスタックにtmpStackを割り当てる方法を知りたい。元のスタックをその値に割り当てる方法が見つからなかったので、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 1つは、移動代入演算子を提供しないためです。しかし、そうした場合は、後者が代わりに呼び出されます。そのような代入演算子(とappopriate移動コンストラクタ、キーワードrule of five)で

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. 
} 

あなたはデータの割り当てと破壊の一歩を保存すると、あなたは(コピーするのではなく、移動)、より効率的なコードを取得します。

+0

ありがとうございました! –

+1

作業代入演算子があれば、通常は* * = std :: move(tmpStack)が望ましいでしょう。 –