我正在尝试remove_if
unique_ptr
的 vector 。由于忘记让我的 lambda 不尝试复制参数,我搜索了解释并在 Can you use `std::remove_if` on a container of `std::unique_ptr`? 中找到了它。 .
但是当我尝试按照此处和有关此事的其他问题中的建议通过引用或 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; });
我错过了什么?
最佳答案
What am I missing ?
它提示的是构造,而不是使用。
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());
}
关于c++ - 如何在 std::unique_ptr 的 std::vector 上使用remove_if?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67605229/