Хотя я согласен с другими, что прямое использование итерируемого контейнера является предпочтительным решением, я хочу отметить, что стандарт C ++ гарантирует достаточную поддержку для самостоятельного решения на тот случай, если вы захотите его по какой-либо причине. 1001 *
А именно, вы можете наследовать от 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;
}