使用C ++ 11,我想遍历一个向量并返回一个表明未找到索引的类型。

我习惯了传统的for(;;)循环并手动指定索引,如下所示。

inline std::size_t ItemList::FindItem(Items& Item)
{
    for (std::size_t i = 0; i < ItemVector.size(); i++)
    {
        if (ItemVector[i]->GetId() == Item.GetId() && !ItemVector[i]->GetName().compare(Item.GetName()))
        {
            return i + 1;
        }

    }
    return 0;
}


我还必须增加索引+1,以返回0值(以适应unsigned size_t),以指示未找到索引的调用方法(我知道这是asinine)。我认为返回std::end()之类的东西更合适吗?

使用C ++ 11迭代器方法会更有效吗?向量将大量填充,并且需要快速找到。

最佳答案

您可以使用std::find_if并使用迭代器:

auto it = std::find_if(ItemVector.begin(), ItemVector.end(),
    [&Item](Items *value) {
        return value->GetId() == Item.GetId() && !value->GetName().compare(Item.GetName());
    }
);


然后,您可以简单地测试it != ItemVector.end()是否知道您是否找到了东西。

在速度方面,此版本与您的版本之间可能没有(或很小)差异,但这是一种检查是否已找到内容的更干净的方法。

07-24 14:40