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

后端 未结 8 1730
忘掉有多难
忘掉有多难 2020-12-14 20:46

If I do not to want to create a new container in order to do so?

8条回答
  •  误落风尘
    2020-12-14 21:35

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

    std::stack 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 
    #include 
    #include 
    
    template 
    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& stack)
    {
        struct HackedStack : private std::stack
        {
            static const Container& container
                (const std::stack& stack)
            {
                return stack.*&HackedStack::c;
            }
        };
    
        return HackedStack::container(stack);
    }
    
    template < class Type, class Container >
    const Container& container
        (const std::queue& queue)
    {
        struct HackedQueue : private std::queue
        {
            static const Container& container
                (const std::queue& queue)
            {
                return queue.*&HackedQueue::c;
            }
        };
    
        return HackedQueue::container(queue);
    }
    
    template
        < class Type
        , template  > class Adapter
        , class Stream
        >
    Stream& operator<<
        (Stream& outputstream, const Adapter& adapter)
    {
        return printOneValueContainer(outputstream, container(adapter));
    }
    

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

提交回复
热议问题