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



我有一个类

class MyClass {
   public:
     string name;
};

我有一个类管理器,其中包含所述类的向量。

class MyManager { 
 public:
   vector<MyClass> classes;
};

我想通过循环和匹配名称从向量中提取一个类

int MyManager::FindMyClass(string name, MyClass *clazz){
    vector<MyClass>::iterator it;
    for(it = classes.begin(); it != classes.end(); ++it){
        if(it->name == name){
            // if i cout here, i see the cout, so i did find it..
            *clazz = *it;
            return 1;
        }
    }
    return 0;
}
int main() {
    MyClass *myClass;
    int result = myManager.FindMyClass("bob", *myClass);
}

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

将参数类型更改为 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;
}

最新更新