代码之家  ›  专栏  ›  技术社区  ›  bjskishore123

为什么std::queue不支持clear()函数?

  •  25
  • bjskishore123  · 技术社区  · 15 年前

    我有这样的要求。对于一个函数,我得到一个数字流的输入。我的意思是,函数不断地被调用,每个调用中只有一个数字。我使用队列来存储数字流。我只需要在满足某些条件时处理一组收集的数字。如果条件不满足,我需要抛出队列中的所有元素,然后开始在其中存储新的数字。为了清空队列,我找不到clear()方法。所以我像下面这样循环。

    while(!q.empty())
        q.pop();
    

    我得到了在

    How do I clear the std::queue efficiently?

    我的问题是:为什么队列不支持clear()函数?

    当deque和vector支持clear()方法时,支持队列的技术难点是什么?

    或者我上面的用例非常罕见,因此不受支持? 谢谢您。

    4 回复  |  直到 9 年前
        2
  •  26
  •   ravenspoint    11 年前

    可以 很容易清除队列:

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

    或者在C++ 11中

    q = {};
    
        3
  •  3
  •   Steve Townsend    15 年前

    queue 只是一些基础容器的适配器,默认情况下为 deque ,功能受限(如您在此处所述)。如果需要完整的函数,请使用下面的 德克 而不是 队列 .

        4
  •  2
  •   Andy Krouwel    9 年前

    将此添加到我不断增长的“使stl可读”函数列表中:

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

    这只是围绕Sellibitze优秀答案的包装,但意味着我不必每次使用该技术时都添加评论。