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

Cannot Retrieve Everything out of a Stack

本文关键字:检索 堆栈      更新时间:2023-10-16

我有点难以理解为什么这段代码没有按预期输出?有什么想法吗?

输出:?

你是

预期: ? 你是如何 你好,

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

因为调用 sentence.pop() 会将堆栈大小减少 1,而您同时会增加 i。这样,您只会获得一半的值。

请改为执行以下操作:

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

当你发出 pop() 时,堆栈的大小会递减,而变量 i 会独立于堆栈的大小而增加。我建议用你的循环代替下面的循环

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

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

相反,我会这样做:

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