【问题标题】:Using unique_ptr with vector and map将 unique_ptr 与矢量和地图一起使用
【发布时间】:2012-12-07 09:19:04
【问题描述】:

我有一个名为 Info 的类。

我尝试创建一个 unique_ptr 向量来保存此类的列表。

映射包含作为字符串的键和作为值的 unique_ptr。

但是当我尝试从地图中检索值并尝试将其放入向量中以形成列表时,VS2010 编译器会出现错误: 错误 C2664: 'void std::vector<_ty>::push_back(_Ty &&)' : 无法将参数 1 从 'std::vector<_ty>' 转换为 '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
}

如何制作 任何有关这方面的帮助将不胜感激。

【问题讨论】:

    标签: containers unique-ptr


    【解决方案1】:

    正如错误消息所暗示的,您正在尝试推回整个 sValue 容器(这是一个 vector&lt;unique_ptr&lt;Info&gt;&gt; 而不是 unique_ptr&lt;Info&gt;。正如您刚刚注意到的那样,这不太顺利。

    您有几个选择。首先,您可以遍历sValuepush_back 每个元素的内容。其次,您可以使用 std::copy 在一个语句中添加元素:

    std::copy(sValue.begin(), sValue.end(), std::back_inserter(sInfo);
    

    第三种选择是使用 std::vector 的insert 函数一次性添加整个容器:

    sInfo.insert(sInfo.end(), sValue.begin(), sValue.end());
    

    【讨论】:

    • 谢谢蒂莫,我确实选择了第一个选项,它确实有效。但现在我遇到了 QMap.error C2248: 'std::unique_ptr<_ty>::operator =' : cannot access private member declaration in class 'std::unique_ptr<_ty>'
    猜你喜欢
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 2017-12-09
    • 2020-05-20
    相关资源
    最近更新 更多