Если вы создаете новую очередь, вы можете использовать конструктор:
std::vector<int> v = get_vector();
std::queue<long int, std::deque<long int>> q(std::deque<long int>(v.begin(),
v.end()));
(Вы можете изменить базовый контейнер по вкусу, хотя deque
, вероятно, лучший.)
Если очередь уже существует, то нет алгоритма на основе диапазона, однако вы можете легко написать свой собственный:
template <typename Iter, typename Q>
push_range(Q & q, Iter begin, Iter end)
{
for ( ; begin != end; ++begin)
q.push(*begin);
}
В качестве отступления: если ваш алгоритм требует такой степени гибкости, вы, вероятно, лучшепросто использовать std::deque
в первую очередь.Контейнерные адаптеры (queue
и stack
) следует использовать только в том случае, если вы хотите явно сказать «это поведение, которое я хочу» (т.е. push / pop).