I'd like to use std::copy
to insert elements into a queue like this:
vector<int> v;
v.push_back( 1 );
v.push_back( 2 );
queue<int> q;
copy( v.begin(), v.end(), insert_iterator< queue<int> >( q, q.front() ) );
But this fails to compile, complaining that begin
is not a member of std::queue
.
Note: I tried it with std::inserter
too - this also failed, this time saying that 'reference' is not a member of 'std::queue'. std::back_inserter
and std::back_insert_iterator
also fail with the same error.
Am I missing something obvious, or do insert_iterator
s just not work with queues?
Unfortunately
std::queue
'adapts' the function known aspush_back
to justpush
which means that the standardback_insert_iterator
doesn't work.Probably the simplest way (albeit conceptually ugly) is to adapt the container adapter with a short lived container adapter adapter[sic] (eugh!) that lives as long as the back insert iterator.
Used like this: