1. ホーム
  2. c++

[解決済み] std::queueを効率よくクリアするにはどうしたらよいですか?

2022-04-14 04:20:16

質問

JobQueueクラスの実装にstd::queueを使用しています。(基本的にこのクラスは、各ジョブをFIFO方式で処理します)。 あるシナリオでは、キューを一発でクリアしたい(キューからすべてのジョブを削除する)。 私はstd::queueクラスで利用可能なclearメソッドを見ません。

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::vector) 内に保持されているメモリを実際にクリアする唯一の方法でもあります。