无法从堆栈中检索所有内容
Cannot Retrieve Everything out of a 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;
}
因为调用 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();
}
相关文章:
- 使用VerQueryValue检索应用程序的文件描述
- 算法问题:查找从堆栈中弹出的所有序列
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 是否可以从格式字符串中检索"width"
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 为什么调用堆栈数组会导致内存泄漏
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- 堆栈和队列是否像C++中的数组一样传递?
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 从堆栈分配的原始指针构造智能指针
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 堆栈中大小变量输入错误 (C++)
- 堆栈问题(平衡表达式问题集)
- 无法从堆栈中检索所有内容
- 如何使用客户端调用堆栈中的地址从 PDB 检索文件/函数/行号?
- 从堆栈中检索指向对象的指针