如何有效地清除std::队列?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (48)

我使用std::Queue来实现JobQueue类。(基本上这个类以FIFO的方式处理每个作业)。在一个场景中,我想一次清除队列(从队列中删除所有作业)。在std::Queue类中,我看不到任何清晰的方法。

如何有效地实现JobQueue类的CLEAR方法?

我有一个简单的解决方案弹出在一个循环,但我正在寻找更好的方法。

//Clears the job queue
void JobQueue ::clearJobs()
 {
  // I want to avoid pop in a loop
    while (!m_Queue.empty())
    {
        m_Queue.pop();
    }
}
提问于
用户回答回答于

用于清除标准容器的一个常见成语是用容器的空版本交换:

void clear( std::queue<int> &q )
{
   std::queue<int> empty;
   std::swap( q, empty );
}

它也是真正清除某些容器中内存的唯一方法(std::vectoral)。

用户回答回答于

是的-这是队列类的一个错误,IMHO。我就是这样做的:

#include <queue>
using namespace std;;

int main() {
    queue <int> q1;
    // stuff
    q1 = queue<int>();  
}

扫码关注云+社区