1

このコードが期待どおりに出力されない理由を理解するのに少し苦労していますか? 何か案は?

出力: ? あなたは

期待される: ?こんにちは、

#include <iostream> 
#include <stack> 
#include <string> 
using namespace std; 

 int main() 
 { 
     stack<string> sentence; 

     sentence.push("Hello,"); 
     sentence.push("how"); 
     sentence.push("are"); 
     sentence.push("you"); 
     sentence.push("?"); 

     for (int i=0; i<sentence.size(); ++i) { 
         cout << sentence.top() << " "; 
         sentence.pop(); 
     } 
     cout << endl; 

     return 0; 
 }
4

3 に答える 3

4

statement.pop() を呼び出すと、スタック サイズが 1 減少し、同時に i が増加するためです。この方法では、値の半分しか取得できません。

代わりにこれを行います:

 while (!sentence.empty()){ 
     cout << sentence.top() << " "; 
     sentence.pop(); 
 } 
于 2013-11-08T23:41:18.043 に答える
2

pop() を発行すると、スタックのサイズとは関係なく変数 i が増加する一方で、スタックのサイズが減少します。次のループをループに置き換えることをお勧めします

 while  ( !sentence.empty() ) { 
     cout << sentence.top() << " "; 
     sentence.pop(); 
 } 
于 2013-11-08T23:42:09.733 に答える
0

ループ内でスタックをポップすると、スタックのサイズが変化し、ループの実行回数に影響します。

代わりに次のようにします。

while (!sentence.empty())
{
    cout << sentence.top() << " ";
    sentence.pop();
}
于 2013-11-08T23:42:08.047 に答える