无法从堆栈中检索所有内容

时间:2013-11-08 23:37:47

标签: c++ stack

我在理解为什么这段代码没有像我预期的那样输出时有点麻烦?有什么想法吗?

输出:?你是

期待:?你好,你好,

#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; 
 }

3 个答案:

答案 0 :(得分:4)

因为调用sentence.pop()会将堆栈大小减少1并且您同时增加i。你只会以这种方式获得一半的价值。

请改为:

 while (!sentence.empty()){ 
     cout << sentence.top() << " "; 
     sentence.pop(); 
 } 

答案 1 :(得分:2)

当你发出pop()时,堆栈的大小会减少,而变量i会随着堆栈的大小而增加。我建议用你的循环替换下面的

 while  ( !sentence.empty() ) { 
     cout << sentence.top() << " "; 
     sentence.pop(); 
 } 

答案 2 :(得分:0)

当你在循环中弹出堆栈时,你正在改变它的大小,影响循环执行的次数。

我会改为:

while (!sentence.empty())
{
    cout << sentence.top() << " ";
    sentence.pop();
}