我想在两个std::vector人中搜索一个值.如果在其中一个中找到它,我想返回它的迭代器.如果没有,我想返回一些值,表明找不到它.
在只std::vector涉及一个人的正常情况下,我会回来std::vector::end.在这种情况下我该怎么办?
正常情况:
auto find_ten=[](const std::vector<int>& v){
return std::find(v.cbegin(),v.cend(),10);
}
Run Code Online (Sandbox Code Playgroud)
我的情况:
auto find_ten=[](const std::vector<int>& v1,const std::vector<int>& v2){
auto it1=std::find(v1.cbegin(),v1.cend(),10);
if(it1==v1.cend()){
auto it2=std::find(v2.cbegin(),v2.cend(),10);
if(it2==v2.cend()){
//What should I return here??
}
return it2;
}
return it1;
}
Run Code Online (Sandbox Code Playgroud)
我想返回一些我可以稍后检查的东西,知道其中10任何一个都找不到该号码.
从C++ 14开始,如果它们符合ForwardIterator类别或更强,则允许比较值初始化迭代器(参见[forward.iterators]第2段).值初始化的迭代器相当于空指针,因此您可以使用:
if(it2==v2.cend()){
return std::vector<int>::iterator{};
}
Run Code Online (Sandbox Code Playgroud)
然后调用者可以这样做:
std::vector<int>::iterator not_found{};
auto find_ten = ...
if (find_ten != not_found)
{
...
}
Run Code Online (Sandbox Code Playgroud)