Очередь не допускает итерацию по своим элементам.
Из документов SGI STL :
Очередь - это адаптер, который обеспечивает
ограниченное подмножество контейнера
Функциональность Очередь "первая в
структура данных "первый выход" (FIFO). 1
То есть элементы добавляются в
задняя часть очереди и может быть удалена
с фронта; Q.front () является
элемент, который был добавлен в очередь
хотя бы недавно. Очередь не позволяет
итерация по его элементам. [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 глупо.