我有一个班级
logger.info(host("localhost").port(8080), "Hello world");
我有一个班主任,有一个上述课程的载体。
class MyClass {
public:
string name;
};
我想通过循环和匹配名称
从向量中提取一个类class MyManager {
public:
vector<MyClass> classes;
};
我知道对象是否正确匹配(请参阅注释)。我已经尝试了指针,双指针,引用的每个组合,并将未知转换中的每个错误都转换为无效指针。我只是不确定我要做什么才能获得对存储在向量中的类的引用。
答案 0 :(得分:2)
将参数类型更改为MyClass*&
,以便您可以返回指向vector
中找到的对象的指针。
int MyManager::FindMyClass(string name, MyClass* &foundPointer)
MyClass *myClass;
int result = myManager.FindMyClass("bob", myClass);
找到匹配后,您可以使用
获取指向对象的指针foundPointer = &(*it);
我还建议将返回类型更改为bool
。
这是该功能的更新版本:
bool MyManager::FindMyClass(string name, MyClass* &foundPointer)
{
vector<MyClass>::iterator it = classes.begin();
for(; it != classes.end(); ++it)
{
if(it->name == name)
{
foundPointer = &(*it);
return true;
}
}
return false;
}
建议的第二项改进:
将返回类型更改为MyClass*
。返回指向找到的对象的指针,如果没有找到,则返回nullptr
。
MyClass* MyManager::FindMyClass(string name)
{
...
}
建议的第三项改进:
使用标准库函数std::find_if
和lambda表达式来简化您的功能。
auto it = std::find_if(classes.begin(),
classes.end(),
[&](const MyClass &c) { return (c.name == name); });
更新的功能:
MyClass* MyManager::FindMyClass(string name)
{
auto it = std::find_if(classes.begin(),
classes.end(),
[&](const MyClass &c) { return (c.name == name); });
if ( it != classes.end() )
{
return &(*it);
}
return nullptr;
}