簡體   English   中英

在向量中找到weak_ptr

[英]Find weak_ptr in vector

我試圖在向量中找到weak_ptr。 我使用lambda表達式作為查找的第三個參數,但我不明白為什么未編譯此代碼:

std::vector<std::weak_ptr<Car>> cars;

std::shared_ptr<Car> lambo = std::make_shared<Car>();
std::weak_ptr<Car> wPtr(lambo);
cars.emplace_back(lambo);

const auto pos = std::find(cars.begin(), cars.end(), [&wPtr](const std::weak_ptr<Car>& ptr1) {
    return ptr1.lock() == wPtr.lock();
});

if (pos != cars.end())
    cout << "Not found!" << endl;

也許有人可以指出我做錯了什么。 提前致謝。

我確定您的意思是std::find_if (帶一個謂詞),而不是std::find (帶一個 )。

最后還修復您的條件,並添加適當的樣板,我們得到:

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

struct Car {};

int main()
{
    std::vector<std::weak_ptr<Car>> cars;

    std::shared_ptr<Car> lambo = std::make_shared<Car>();
    std::weak_ptr<Car> wPtr(lambo);
    cars.emplace_back(lambo);

    const auto pos = std::find_if(cars.begin(), cars.end(), [&wPtr](const std::weak_ptr<Car>& ptr1) {
        return ptr1.lock() == wPtr.lock();
    });

    if (pos == cars.end())
        std::cout << "Not found!" << std::endl;
    else
        std::cout << "Found!" << std::endl;
}

// Output: Found!

現場演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM