3

我目前正在编写一些代码,它将在 Person 类型的向量中进行搜索(我已在代码中定义并在需要时显示)。如果它找到了这个人,它会返回他们的名字。这目前正在工作,但如果它没有找到这个人,它应该返回一个 Null 指针。问题是,我不知道如何让它返回一个 Null 指针!它只是让程序每次都崩溃。

代码:

Person* lookForName(vector<Person*> names, string input)
{
    string searchName = input;
    string foundName;
    for (int i = 0; i < names.size(); i++) {
        Person* p = names[i];
        if (p->getName() == input) {
            p->getName();
            return p; //This works fine. No problems here
            break; 
        } else {
            //Not working Person* p = NULL; <---Here is where the error is happening
            return p;
        }
    }
}
4

4 回答 4

4

您可以使用std::find_if算法:

Person * lookForName(vector<Person*> &names, const std::string& input)
{
    auto it = std::find_if(names.begin(), names.end(),
              [&input](Person* p){ return p->getName() == input; });


    return it != names.end() ? *it : nullptr; // if iterator reaches names.end(), it's not found
}

对于 C++03 版本:

struct isSameName
{
    explicit isSameName(const std::string& name)
    : name_(name)
    {
    }

    bool operator()(Person* p)
    {
       return p->getName() == name_;
    }
    std::string name_;
};

Person * lookForName(vector<Person*> &names, const std::string& input)
{
    vector<Person*>::iterator it = std::find_if(names.begin(), names.end(),
                           isSameName(input));


    return it != names.end() ? *it : NULL;
}
于 2013-08-24T00:48:30.110 回答
1

看起来您只需要返回 Null、nullptr 或 0。

代码项目

于 2013-08-24T00:42:14.837 回答
1

如果您要搜索的名称不在第一个元素中,那么您就不会在其余元素中搜索。

你需要做类似的事情 -

for (int i = 0; i<names.size(); i++){
    Person* p = names[i];
    if (p->getName() == input) {
        return p;

        // Placing break statement here has no meaning as it won't be executed.
    } 
}

// Flow reaches here if the name is not found in the vector. So, just return NULL
return NULL;

正如克里斯建议的那样,尝试使用std::find_if算法。

于 2013-08-24T00:48:02.780 回答
0

只需使用以下代码:

return NULL;
于 2013-08-24T00:42:56.073 回答