将向量复制到队列中

时间:2020-01-23 12:47:44

标签: c++ stl

我有向量

 std::vector<OrderInfo *> vec

和一个队列

queue<OrderInfo *> *myQueue = new queue<OrderInfo *>;

我想将向量复制到队列中。我尝试使用How can I copy an entire vector into a queue?这个答案以及这个Insert into an STL queue using std::copy

但是它不起作用,如何使它起作用?

这是我尝试过的: myQueue =新队列(vec.begin(),vec.end()); 我有

错误:没有匹配的函数可以调用 ‘std :: queue :: queue(std :: vector :: iterator, std :: vector :: iterator)’myQueue = new 队列(vec.begin(),vec.end());

当我尝试这样做时:

std::copy(vec.begin(),vec.end(),std::back_inserter(myQueue));

我得到了:

必填 ‘BacStrategy :: BacStrategy(EZXConnectionHandler&,const string&,bool,const double&,int)[with Event_Type = EZXOrderEventHandler; std :: __ cxx11 :: string = std :: __ cxx11 :: basic_string]’ /home/yaodav/Desktop/git_repo/test/main.cpp:324:51:需要 此处/usr/local/include/c++/7.4.0/bits/stl_iterator.h:490:7:错误: “ std :: queue *”不是类,结构或联合类型 operator =(const类型名_Container :: value_type&__value)

1 个答案:

答案 0 :(得分:5)

myQueue pointer ,不是队列,并且不能传递给std::back_inserter。要解决此问题,请不要将其声明为指针。

此外,std::back_inserter不能与std::queue一起使用,如您发布的第二个链接所述。

相反,只需写

std::queue<OrderInfo*> myQueue{
    std::deque<OrderInfo*>(vec.begin(), vec.end())
};

如果您确实需要一个指针,请按如下所示修改代码:

std::queue<OrderInfo*>* myQueue = new std::queue<OrderInfo*>{
    std::deque<OrderInfo*>(vec.begin(), vec.end())
};

最后,如果您需要填充已经初始化的队列,请按照以下步骤操作:使用上面的命令创建一个临时队列并将其分配给指针:

*myQueue = std::queue<OrderInfo*>{std::deque<OrderInfo*>(vec.begin(), vec.end())};

如果这看起来太乱了,您还可以为该队列创建一个临时变量-但在这种情况下,您需要使用std::move来确保该队列获得移动分配,而不是昂贵地复制:

auto tmp = std::queue<OrderInfo*>{std::deque<OrderInfo*>(vec.begin(), vec.end())};
*myQueue = std::move(tmp);

同样,请仔细考虑是否要存储OrderInfo,而不是指向OrderInfo的指针。