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

时间:2011-11-17 13:47:39

标签: c++ vector copy queue

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

3 个答案:

答案 0 :(得分:14)

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

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。容器适配器(queuestack)只应在明确说明“这是我想要的行为”(即推/弹)时使用。

答案 1 :(得分:6)

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

std::vector<T> v;
...
std::queue<T> q;
for (const auto& e: v)
  q.push(e)

即使使用std :: copy也很繁琐,因为你必须将队列包装在适配器中(Insert into an STL queue using std::copy)。

答案 2 :(得分:2)

队列的构造函数如下:

explicit queue ( const Container& ctnr = Container() );

所以你可以有一些向量v并从中构造一个队列。

vector<int> v;
deque<int> d;
/* some random magic code goes here */
queue<int, deque<int>> q(d(v));

但是你不能对已经初始化的q中的push_back元素执行此操作。您可以使用另一个Container,清空您的队列,将您的向量追加到该容器,并从该向量创建一个新队列;但我会迭代而不是完成所有这些。

最终答案:不,没有为队列实现这样的方法,你可以使用deque或迭代你的向量。