我不能将指针作为STL谓词的参数吗?

问题描述 投票:-1回答:2

如何获得指针?

我想将指针作为您看到的lambda表达式的参数!

vector<unique_ptr<int>> arr{};

for (int i = 0; i < 100; ++i) {
  arr.emplace_back(i);
}

auto p = find_if(arr.begin(), arr.end(),
                 [](const unique_ptr<int>& a)  // error
                 { return *a == 10; });

cout << *p << endl;
c++ stl smart-pointers unique-ptr predicate
2个回答
1
投票

问题是,类模板std :: unique_ptr没有隐式构造函数,该构造函数接受模板参数类型的对象。

所以这个循环

for (int i = 0; i < 100; ++i)
{
    arr.emplace_back(i);
}

不正确。

也有此声明

cout << *p << endl;

也是不正确的。改写

cout << **p << endl;

看来您是说以下

for (int i = 0; i < 100; ++i)
{
    arr.emplace_back( make_unique<int>( i ) );
}

auto p = find_if(arr.begin(), arr.end(), [](const unique_ptr<int>& a) // error
{
    return *a == 10;
});

if ( p != arr.end() ) cout << **p << endl;

0
投票

问题不是lambda,而是在向量中构造元素的方式。这就是您想要的方式:

for (int i = 0; i != 100; ++i) {
    arr.emplace_back( std::make_unique<int>( i ) );
}
© www.soinside.com 2019 - 2024. All rights reserved.