查找并返回指向向量中对象的指针

时间:2017-06-05 03:47:37

标签: c++ pointers object vector find

c ++的新手,不确定我哪里出错了。仍然把头包裹在ptrs周围。

我有一个配置文件对象的向量。我想根据它的一个属性找到一个特定的对象。然后我想要返回那个对象。我不想制作副本或任何对象,所以我想我需要返回一个指向特定对象的指针?

这是我的代码:

Profile* profileManager::getProfile(const std::string& name)
{
    std::vector<Profile>::iterator it = std::find_if(allProfiles.begin(), allProfiles.end(), [name](Profile &p) { return p.getName() == name; });
    return it != allProfiles.end() ? *it : nullptr;
}

有一些错误,我不知道如何修复。如果找不到匹配项,我想返回null并让调用者处理它,我该怎么做?我此刻得到的是一种不兼容的类型,我试图改变它的回报但没有运气。它还说它不是正确的类型。如果找到它,如何让它返回指向配置文件的指针?

任何帮助/建议表示赞赏。感谢。

1 个答案:

答案 0 :(得分:3)

return it != allProfiles.end() ? *it : nullptr;

这几乎可以满足您的需求。 *it的类型是Profile。要获取指向它的指针,只需获取地址:&*it

另外,一些建议的更改。

  1. 使getProfile成为常量方法。它没有(也不应该)修改任何东西 持续超载getProfile是一个好主意,但你也想保留可变的过载。

  2. 让lambda参数成为常量引用(const Profile &p)。如果您进行上述更改,这也是必要的。

  3. 您不需要按值捕获name。通过引用捕获它可以节省复制。 [&name]