繰り返す必要がありstd::queue
ます。www.cplusplus.comによると:
デフォルトでは、特定のキュークラスにコンテナクラスが指定されていない場合、標準のコンテナクラステンプレートdequeが使用されます。
それで、どういうわけか、キューの基になる両端キューに到達して、それを反復処理できますか?
繰り返す必要がありstd::queue
ます。www.cplusplus.comによると:
デフォルトでは、特定のキュークラスにコンテナクラスが指定されていない場合、標準のコンテナクラステンプレートdequeが使用されます。
それで、どういうわけか、キューの基になる両端キューに到達して、それを反復処理できますか?
を反復処理する必要がqueue
ある場合は、キュー以上のものが必要です。標準コンテナ アダプタのポイントは、最小限のインターフェイスを提供することです。繰り返しも行う必要がある場合は、代わりに deque (またはリスト) を使用してみませんか?
反復可能なコンテナーを直接使用することが推奨されるソリューションであることに同意しますが、C ++標準は、何らかの理由で必要な場合に備えて、日曜大工のソリューションを十分にサポートすることを保証します。
つまり、std::queue
保護されたメンバーContainer c;
を継承して使用し、基になるコンテナのbegin()およびend()にアクセスできます(そのようなメソッドがそこに存在する場合)。VS 2010で動作し、ideoneでテストされた例を次に示します。
#include <queue>
#include <deque>
#include <iostream>
template<typename T, typename Container=std::deque<T> >
class iterable_queue : public std::queue<T,Container>
{
public:
typedef typename Container::iterator iterator;
typedef typename Container::const_iterator const_iterator;
iterator begin() { return this->c.begin(); }
iterator end() { return this->c.end(); }
const_iterator begin() const { return this->c.begin(); }
const_iterator end() const { return this->c.end(); }
};
int main() {
iterable_queue<int> int_queue;
for(int i=0; i<10; ++i)
int_queue.push(i);
for(auto it=int_queue.begin(); it!=int_queue.end();++it)
std::cout << *it << "\n";
return 0;
}
One indirect solution can be to use std::deque instead. It supports all operations of queue and you can iterate over it just by using for(auto& x:qu)
. It's much more efficient than using a temporary copy of queue for iteration.
反復したいキューのコピーを作成し、アイテムを一度に 1 つずつ削除して、それらを印刷してみませんか? 繰り返しながら要素をさらに処理したい場合、キューは間違ったデータ構造です。
要するに:いいえ。
ハックがあり、ベクターをアンダーレイ コンテナーとして使用するため、queue::front
有効な参照を返し、それをポインターに変換し、<= まで反復します。queue::back
std::queue
はコンテナー アダプターであり、使用するコンテナーを指定できます (デフォルトでは を使用しますdeque
)。アダプタでそれ以上の機能が必要な場合は、deque
または別のコンテナを直接使用してください。
キューを反復する必要がある場合...キューは必要なコンテナではありません。
なぜキューを選んだのですか?
繰り返し処理できるコンテナーを使用してみませんか?
1.キューを選択した場合、コンテナを「キュー」インターフェースにラップしたいとします: - フロント - バック - プッシュ - ポップ - ...
繰り返したい場合は、キューのインターフェースが正しくありません。キューは、元のコンテナーの制限されたサブセットを提供するアダプターです
2.キューの定義はFIFOであり、定義によりFIFOは反復可能ではありません