检查在没有特定容器时是否未将迭代器分配给项目

Hum*_*awi 8 c++ vector c++11

我想在两个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任何一个都找不到该号码.

Jon*_*ely 8

从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)