我有一个名为Info的课程。
我尝试创建一个unique_ptr向量来保存这个类的列表。
地图包含键作为字符串,unique_ptr作为值。
但是当我尝试从地图中检索值并尝试将其放入向量中以形成列表时,VS2010编译器会出错: 错误C2664:'void std :: vector< _Ty> :: push_back(_Ty&&)':无法从'std :: vector< _Ty>'转换参数1到'std :: unique_ptr< _Ty> &安培;&安培;'
vector<unique_ptr<Info>> sInfo;
QMap<QString,vector<unique_ptr<Info>>>::Iterator iterMap;
for(iterMap = map_sInfo.begin(); iterMap != map_sInfo.end(); ++iterMap)
{
vector<unique_ptr<Info>>sValue = iterMap.value();
sInfo.push_back((sValue)); //error C2664
}
我如何制作 对此有任何帮助将非常感激。
答案 0 :(得分:0)
正如错误消息所示,您正试图推回整个sValue容器(这是vector<unique_ptr<Info>>
而不是unique_ptr<Info>
。正如您刚才注意到的那样,这不是太好了
您有几个选择。首先,您可以遍历sValue
和push_back
每个元素的内容。其次,您可以使用std :: copy在一个语句中添加元素:
std::copy(sValue.begin(), sValue.end(), std::back_inserter(sInfo);
第三个选项是使用std :: vector的insert
函数一次性添加整个容器:
sInfo.insert(sInfo.end(), sValue.begin(), sValue.end());