如果我想找到一些东西但不想让它在最后找不到的话,我应该使用哪种STL算法?
我的用例是我需要在用户定义类型的向量中找到或返回null。
如果找不到,Find和Find_If似乎会返回最后一项。如果找不到元素,我需要做“其他”。
由于
答案 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;