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并让调用者处理它,我该怎么做?我此刻得到的是一种不兼容的类型,我试图改变它的回报但没有运气。它还说它不是正确的类型。如果找到它,如何让它返回指向配置文件的指针?
任何帮助/建议表示赞赏。感谢。
答案 0 :(得分:3)
return it != allProfiles.end() ? *it : nullptr;
这几乎可以满足您的需求。 *it
的类型是Profile
。要获取指向它的指针,只需获取地址:&*it
另外,一些建议的更改。
使
持续超载getProfile
成为常量方法。它没有(也不应该)修改任何东西getProfile
是一个好主意,但你也想保留可变的过载。
让lambda参数成为常量引用(const Profile &p)
。如果您进行上述更改,这也是必要的。
name
。通过引用捕获它可以节省复制。 [&name]