C++在向量中找到

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)

Vit*_*tus 6

当你的第一个元素不匹配时,执行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(它永远不能是有效的矢量索引).

  • "未找到"问题的真正解决方案是使用迭代器并返回结束迭代器.当然,这只是`std :: find`. (5认同)

Ric*_*lis 5

你的'else'子句就是问题所在:如果第一个项不匹配,'else'就会启动,你的'return 0'语句会让你脱离'for'循环而不尝试任何其他元素矢量.

尝试摆脱'else',并在'for'循环结束后将 'return 0'移动到' .

  • ****返回**之后的**break**也永远不会被调用. (2认同)