我正在尝试做一个函数,该函数将返回在 vector 中发现事件的位置。但我的返回值始终为 0,我确信存在匹配项。
代码如下:
int findInItemvector(vector<Item> vec, string name)
{
for(vector<Item>::iterator it = vec.begin(); it < vec.end(); it++)
{
if(it->getName() == name)
{
return it - vec.begin();
break;
}
else
{
return 0;
}
}
}
最佳答案
当您的第一个元素不匹配时,else 分支将执行 return
,这将离开该函数,并且您的循环的其余部分不会被执行。你想要这样的东西:
int findInItemvector(vector<Item> vec, string name)
{
for(vector<Item>::iterator it = vec.begin(); it < vec.end(); it++)
{
if(it->getName() == name)
{
return it - vec.begin();
}
}
return 0;
}
但是,由于第一项也可以匹配(在这种情况下 it - vec.begin() == 0
),我建议您使用其他保护值,例如 -1(永远不可能是有效的 vector 索引)。
关于C++ 在 vector 中查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6809608/