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

因为调用 sentence.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 回答