三行代码  ›  专栏  ›  技术社区  ›  Abhishek jha

重载<<c中打印堆栈的运算符++

c++
  •  -2
  • Abhishek jha  · 技术社区  · 1 月前
    #include <iostream>
    #include <ostream>
    #include <bits/stdc++.h>
    using namespace std;
    void printHelper(ostream& os,stack<int>& s){
        if(s.empty())
            return ;
        int val = s.top();
        s.pop();
        printHelper(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
    

    我想知道为什么这段代码不起作用,我想以与java中相同的方式在方括号内打印堆栈,即 [ 1 2 3 4 5 ] . 请帮我找出我做错了什么。

    1 回复  |  直到 1 月前
        1
  •  2
  •   Anoop Rana    1 月前

    这个 问题 (错误)是 printHelper 需要两个参数,但您仅在写入时传递:

    //----------v--->you've passed only 1
    printHelper(s);
    

    要解决此问题(错误),只需传递两个参数,如下所示:

    //----------vv--v---------->pass 2 arguments as expected by printHelper
    printHelper(os, s);
    

    Working demo