我目前正在研究一些代码,这些代码将在Person类型的向量内进行搜索(我已在代码中定义并在需要时显示)。如果找到该人,则返回其姓名。这当前正在工作,但如果找不到该人,则应该返回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;
}
}
}
答案 0 :(得分:3)
您可以使用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;
}
答案 1 :(得分:1)
看起来你只需要返回Null,nullptr或0。
答案 2 :(得分: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;
正如Chris建议的那样,尝试使用std::find_if
算法。
答案 3 :(得分:0)
只需使用以下代码:
return NULL;