我在理解为什么这段代码没有像我预期的那样输出时有点麻烦?有什么想法吗?
输出:?你是
期待:?你好,你好,
#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;
}
答案 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();
}