C++重载<<运算符打印栈无法输出指定方括号格式问题排查
C++ 重载<<运算符打印int栈的错误修复
你的代码存在2个会直接导致编译失败的语法/调用错误,修正后即可正常输出目标格式内容:
- 递归调用参数不匹配:辅助打印函数
printHelper定义为接收2个参数(输出流引用、栈引用),但递归调用时仅传入了栈对象s,漏传第一个参数os,编译器会报参数数量不匹配错误。 - 字符串字面量未闭合:输出收尾的
]和换行时,代码错误将字符串跨行拆分,引号没有包裹完整的输出内容,触发语法错误。
补充说明:你用递归弹栈、回溯打印、再压回元素的逻辑是正确的——入栈顺序为1到5时栈顶为5,弹栈顺序为5、4、3、2、1,回溯阶段从栈底元素1开始打印,最终顺序刚好符合预期,且打印完成后栈结构完全恢复,不会破坏原有数据。
修复后可直接运行的代码
#include <iostream> #include <ostream> #include <stack> using namespace std; void printHelper(ostream& os, stack<int>& s){ if(s.empty()) return; int val = s.top(); s.pop(); printHelper(os, s); // 补全递归调用缺失的输出流参数 os << val << " "; s.push(val); } ostream& operator<<(ostream& os, stack<int>& s){ os << "[ "; printHelper(os, s); os << "]\n"; // 修正字符串换行写法,保证字面量闭合 return os; } int main(){ #ifndef ONLINE_JUDGE freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); #endif stack<int> s; for(int i = 0;i<5;i++){ s.push(i+1); } cout << s; return 0; } // c++ stack 常用接口:push pop top size empty
运行后输出结果:
[ 1 2 3 4 5 ]
内容的提问来源于stack exchange,提问作者Abhishek jha
相关产品推荐
相关产品推荐

