Hen*_*erg 0 c++ iterator stl vector find
我试图做的功能将返回在向量中发现事件的postition.但我的返回值始终为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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
当你的第一个元素不匹配时,执行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;
}
Run Code Online (Sandbox Code Playgroud)
但是,由于第一项也可以匹配(在这种情况下it - vec.begin() == 0
),我建议你使用其他保护值,例如-1(它永远不能是有效的矢量索引).
你的'else'子句就是问题所在:如果第一个项不匹配,'else'就会启动,你的'return 0'语句会让你脱离'for'循环而不尝试任何其他元素矢量.
尝试摆脱'else',并在'for'循环结束后将 'return 0'移动到' .
归档时间: |
|
查看次数: |
2092 次 |
最近记录: |