2016-04-10 10 views
0

私は2つの他のスタック(S1とS2)を使ってスタック(S)を反転しようとしています。これは私が試しているコードです:C++ 2つの追加のスタックを使用してスタックを反転する

#include <iostream> 
#include <stack> 

using namespace std; 

int main() 
{ 
    stack<int> S, S1, S2; 
    S.push(1), S.push(2), S.push(3); 

    cout << "The top element of S is: " << S.top() << endl; 

    while (!S.empty()) { 
     S1.push(S.pop()); 
    } 
    while (!S1.empty()) 
     S2.push(S1.pop()); 
    while (!S2.empty()) 
     S.push(S2.pop()); 

    cout << "The top element of S is now: " << S.top() << endl; 

    return 0; 
} 

これは、私が内側のプッシュからポップを呼び出すたびに私が得ているエラー(x3)です。 'const value_type'(別名 'const int')の型が 'void'型の右辺値にバインドできませんでした。S1.push(S.pop());

ポップされた値を割り当てようとしましたが、その変数でpushを呼び出すこともできましたが、失敗しました。

助けていただけたら幸いです!

+2

ライブラリ関数を使用する前に、いくつかのリファレンスドキュメントを読むことをお勧めします。['std :: stack :: pop()'](http://en.cppreference.com/w/cpp/container/stack/pop )は 'void'を返します。もう1つは、スタックを逆にするために実際に2つのスタックが必要ないということです。また、奇妙になるかもしれないことは、[コンマ演算子]の誤用です(http://stackoverflow.com/questions/54142/how-does-the-comma-operator-work)。 [検証されたソース]からC++リフレッシャーを取得してコーディングに進む準備が整っていることを確認してください(http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – Drop

+0

RTFM 。推測しないでください。 –

答えて

4

あなたは

S1.push(S.top()); 
S.pop(); 

std::stack::pop()void戻り値の型を持って書くべきです。

+0

ありがとう!なぜこれがセグメンテーションフォルトを作成するのか知っていますか? – Brittany

+0

@Brittanyいいえ、それは別の問題です。これについて別の質問をする必要があります。 [MCVE]を提供することを忘れないでください。 –

1

pop()スタックからポップされた値を返しません。 pop()voidを返します。 pop()はスタックから値を削除し、それ以外は何もしません。

top()を使用してスタックの先頭にある値を読み取ってからpop()に電話する必要があります。

関連する問題