zoukankan      html  css  js  c++  java
  • 如何打印查看c++stack<..>中的内容(不使用pop,top)

    how to print out all elements in a std::stack or std::queue conveniently

     方法1:copy到临时

    #include <iostream>
    #include<stack>
    
    using namespace std;
    
    int main()
    {
        //method 1 : copy
        int a = (3+9)/4;
        cout << "a ; " << a << endl;
        stack<int> s1;
        s1.push(1);
        s1.push(2);
        s1.push(3);
        stack<int> s2;
        s2 = s1;
        while(!s2.empty()){
            cout << s2.top() << endl;
            s2.pop();
        }
        s2 = s1;
        while(!s2.empty()){
            cout << s2.top() << endl;
            s2.pop();
        }
        return 0;
    }
    方法2:stackoverflow:

    I've written a snippet to do that for debugging. For example:

    std::stack<int> s; // works with std::queue also!
    s.push(1);
    s.push(2);
    
    std::cout << s; // [ 1, 2 ]
    

    Please forgive me for this hackish code! but this is what I've written months ago:

    #include <stack>
    #include <queue>
    #include <ostream>
    
    template <class Container, class Stream>
    Stream& printOneValueContainer
        (Stream& outputstream, const Container& container)
    {
        typename Container::const_iterator beg = container.begin();
    
        outputstream << "[";
    
        while(beg != container.end())
        {
            outputstream << " " << *beg++;
        }
    
        outputstream << " ]";
    
        return outputstream;
    }
    
    template < class Type, class Container >
    const Container& container
        (const std::stack<Type, Container>& stack)
    {
        struct HackedStack : private std::stack<Type, Container>
        {
            static const Container& container
                (const std::stack<Type, Container>& stack)
            {
                return stack.*&HackedStack::c;
            }
        };
    
        return HackedStack::container(stack);
    }
    
    template < class Type, class Container >
    const Container& container
        (const std::queue<Type, Container>& queue)
    {
        struct HackedQueue : private std::queue<Type, Container>
        {
            static const Container& container
                (const std::queue<Type, Container>& queue)
            {
                return queue.*&HackedQueue::c;
            }
        };
    
        return HackedQueue::container(queue);
    }
    
    template
        < class Type
        , template <class Type, class Container = std::deque<Type> > class Adapter
        , class Stream
        >
    Stream& operator<<
        (Stream& outputstream, const Adapter<Type>& adapter)
    {
        return printOneValueContainer(outputstream, container(adapter));
    }
    

    You can stream std::stack and std::queue just like any other supported type!

  • 相关阅读:
    Git—分支管理
    Git—推送代码至Github
    Git入门—创建项目
    Mysql单表查询
    Mysql数据的增删改查
    Mysql完整约束性
    C++继承中同名成员变量处理方法
    C++继承和组合中的构造函数和析构函数调用原则
    C++继承中的类型兼容原则
    C++中的继承
  • 原文地址:https://www.cnblogs.com/CreatorKou/p/9077923.html
Copyright © 2011-2022 走看看