我正在尝试将remove_if
作为unique_ptr
的向量。由于忘记了让lambda不尝试复制参数,我搜索了解释,并在"std::unique_ptr"的容器上使用"std:::remove_if"中找到了它?。
但是,当我试图按照建议通过引用或const-ref传递lambda参数时,以及在其他问题中,我仍然得到'std::unique_ptr<int,std::default_delete<int>>::unique_ptr(const std::unique_ptr<int,std::default_delete<int>> &)': attempting to reference a deleted function
。我不明白为什么要调用这个复制构造。
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::initialiser_list
只能从中复制,因此std::initialiser_list<std::unique_ptr<...>>
是无用的。
#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());
}
在coliru 上查看