队列不允许迭代其元素。
来自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 很愚蠢。