Why doesn't std::queue support a clear() function?

前端 未结 4 784
感情败类
感情败类 2021-02-01 16:12

I have requirement: for a function, I get the input as a stream of numbers. I mean, the function keeps on getting called with single number in each call. I am using std::q

相关标签:
4条回答
  • 2021-02-01 16:42

    queue is just an adapter for some underlying container, by default a deque, with restricted function (as you noted here). If you want the full blown function use the underlying deque instead of queue.

    0 讨论(0)
  • 2021-02-01 16:48

    According to http://www.cplusplus.com/reference/stl/queue/,

    queues are implemented as containers adaptors, which are classes that use an encapsulated object of a specific container class as its underlying container, providing a specific set of member functions to access it elements.

    which means that the queue uses an already existing container, and is just really is an interface to this container as a FIFO queue.

    This means queues are not meant to be cleared. If you need to clear a queue, this means you actually need to use an object that is not a queue, and therefore you should instead use the actual underlying container type, being a deque by default.

    0 讨论(0)
  • 2021-02-01 16:52

    Added this to my growing list of 'make STL readable' functions:

    template <typename T> 
    void Clear(std::queue<T>& Queue) 
    {
        Queue = std::queue<T>(); // Assign to empty queue
    }
    

    It's just a wrapper around sellibitze's excellent answer, but means I don't have to also add a comment every time I use the technique.

    0 讨论(0)
  • 2021-02-01 16:58

    Apart from what has been said already, you can clear a queue very easily:

    queue<int> q;
    ...
    q = queue<int>(); // Assign an empty queue
    

    or in C++11

    q = {};
    
    0 讨论(0)
提交回复
热议问题