通过函数参数从向量中获取类指针

时间:2017-10-26 21:06:10

标签: c++ pointers

我有一个班级

logger.info(host("localhost").port(8080), "Hello world");

我有一个班主任,有一个上述课程的载体。

class MyClass {
   public:
     string name;
};

我想通过循环和匹配名称

从向量中提取一个类
class MyManager { 
 public:
   vector<MyClass> classes;
};

我知道对象是否正确匹配(请参阅注释)。我已经尝试了指针,双指针,引用的每个组合,并将未知转换中的每个错误都转换为无效指针。我只是不确定我要做什么才能获得对存储在向量中的类的引用。

1 个答案:

答案 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;
}