Queue は、その要素の繰り返しを許可しません。
SGI STL ドキュメントから:
キューは、コンテナ機能の制限されたサブセットを提供するアダプタです。キューは、「先入れ先出し」(FIFO) データ構造です。1
つまり、要素はキューの後ろに追加され、前から削除される場合があります。Q.front() は、最後にキューに追加された要素です。Queue は、その要素の繰り返しを許可しません。[2]
これを機能させることはできますが、使用することはできませんinsert_iterator
。queue_inserter
イテレータインターフェースを提示するようなものを書く必要があります。
更新私は自分自身を助けることができず、必要なイテレータを実装しようと決心しました。結果は次のとおりです。
template< typename T, typename U >
class queue_inserter {
queue<T, U> &qu;
public:
queue_inserter(queue<T,U> &q) : qu(q) { }
queue_inserter<T,U> operator ++ (int) { return *this; }
queue_inserter<T,U> operator * () { return *this; }
void operator = (const T &val) { qu.push(val); }
};
template< typename T, typename U >
queue_inserter<T,U> make_queue_inserter(queue<T,U> &q) {
return queue_inserter<T,U>(q);
}
これは、次のような関数に最適です。
template<typename II, typename OI>
void mycopy(II b, II e, OI oi) {
while (b != e) { *oi++ = *b++; }
}
しかし、STL はばかげているため、STL のコピーでは機能しません。