C++ 如何在std::unique\u ptr的std::vector上使用remove\u if?

C++ 如何在std::unique\u ptr的std::vector上使用remove\u if?,c++,stl,unique-ptr,C++,Stl,Unique Ptr,我试图删除2;}); 我错过了什么 我错过了什么 它抱怨的是建筑,而不是使用 std::initialiser\u list只能从中复制,因此std::initialiser\u list是无用的 #include <memory> #include <vector> #include <algorithm> int main() { std::vector<std::unique_ptr<int>> v; v.em

我试图
删除
一个
唯一的向量\u ptr
。忘了让lambda不尝试复制参数,我搜索了解释并在中找到了它

但是,当我尝试通过引用或const ref传递lambda参数时,我仍然会得到
'std::unique\u ptr::unique\u ptr(const std::unique\u ptr&'):尝试引用已删除的函数
。我不明白为什么会调用这个复制构造

std::vector<std::unique_ptr<int>> v {
    std::make_unique<int>(1),
    std::make_unique<int>(2),
    std::make_unique<int>(3)
};

auto result = std::remove_if(v.begin(), v.end(), [](const std::unique_ptr<int> &it) {return *it > 2; });
std::vector v{ 标准::使_唯一(1), 标准::使_独一无二(2), 标准::使_独一无二(3) }; 自动结果=std::remove_if(v.begin(),v.end(),[](const std::unique_ptr&it){return*it>2;});
我错过了什么

我错过了什么

它抱怨的是建筑,而不是使用

std::initialiser\u list
只能从中复制,因此
std::initialiser\u list
是无用的

#include <memory>
#include <vector>
#include <algorithm>

int main()
{
    std::vector<std::unique_ptr<int>> v;
    v.emplace_back(std::make_unique<int>(1));    
    v.emplace_back(std::make_unique<int>(2));    
    v.emplace_back(std::make_unique<int>(3));    
    
    auto result = std::remove_if(v.begin(), v.end(), [](const std::unique_ptr<int> &it) {return *it > 2; });
    v.erase(result, v.end());
}
#包括
#包括

#包括

问题是向量初始化。。。您不能在此处使用初始值设定项列表:/哇塞。谢谢相关引用:
基础数组是一个const T[N]类型的临时数组,其中每个元素都是从原始初始值设定项列表的相应元素复制初始化的(缩小转换无效除外)。