如何将整个矢量复制到队列中?

Bil*_*ham 8 c++ queue copy vector

我希望将矢量的全部内容复制到C++队列中.这是一个内置函数还是循环遍历每个元素是必要的?

Ker*_* SB 14

如果创建新队列,则可以使用构造函数:

std::vector<int> v = get_vector();

std::queue<long int, std::deque<long int>> q(std::deque<long int>(v.begin(),
                                                                  v.end()));
Run Code Online (Sandbox Code Playgroud)

(您可以根据需要更改底层容器,但deque可能是最好的.)

如果队列已经存在,那么没有基于范围的算法,您可以轻松编写自己的队列:

template <typename Iter, typename Q>
push_range(Q & q, Iter begin, Iter end)
{
    for ( ; begin != end; ++begin)
        q.push(*begin);
}
Run Code Online (Sandbox Code Playgroud)

顺便说一下:如果你的算法需要大量的灵活性,那么你最好只使用a std::deque.只有当你想明确地说"这是我想要的行为"(即推/弹)时才应该使用容器适配器(queuestack).

  • @BjörnPollex:不,同样的行数:-)再次感谢! (2认同)

log*_*og0 6

可能最好的方法是直接将元素推入队列.

std::vector<T> v;
...
std::queue<T> q;
for (const auto& e: v)
  q.push(e)
Run Code Online (Sandbox Code Playgroud)

即使使用std :: copy也很繁琐,因为你必须将队列包装在一个适配器中(使用std :: copy插入一个STL队列).