如果我想找到一些东西但不想让它在最后找不到,我应该使用哪种STL算法?

时间:2012-03-14 17:25:25

标签: c++

如果我想找到一些东西但不想让它在最后找不到的话,我应该使用哪种STL算法?

我的用例是我需要在用户定义类型的向量中找到或返回null。

如果找不到,Find和Find_If似乎会返回最后一项。如果找不到元素,我需要做“其他”。

由于

3 个答案:

答案 0 :(得分:12)

.end()如果向量未指向“最后一项”,则最后一项之后为空。如果你需要做其他事情,只需把它放在一个条件下。

std::vector<T>::iterator it = std::find(vec.begin(), vec.end(), .....);
if (it != vec.end())
{
   // object found
   return *it;
}
else
{
   // do something else
   return NULL;
}

答案 1 :(得分:1)

我真的不明白找到返回结束的问题是什么?结束不是最后一个元素,而是'过去的一个'。

你可以这样做来捕捉未找到的案例:

std::vector<int> a {1,2,3,4,5,6};
auto it=std::find(a.begin(), a.end(), 4); //or find if

if(it!=a.end())
{
     std::cout <<"found" << std::endl;
}
else
{
    std::cout << "did not find" << std::endl;
}

答案 2 :(得分:1)

您想要返回:指针 - 或 - NULL。你有:iterator-or - end()

auto it = std::find(std::begin(x), std::end(x), 42);
return it == std::end(x) ? 0 : &*it;