gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:37:54 27 4
gpt4 key购买 nike

我想在两个 std::vector 中搜索一个值。如果在其中一个中找到它,我想返回它的迭代器。如果没有,我想返回一些表明它没有找到的值。

在只涉及一个std::vector 的正常情况下,我会返回std::vector::end。遇到这种情况怎么办?

正常情况:

auto find_ten=[](const std::vector<int>& v){
return std::find(v.cbegin(),v.cend(),10);
}

我的情况:

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;
}

我想返回一些东西,稍后我可以检查它以了解在其中任何一个中都找不到数字 10

最佳答案

从 C++14 开始,如果值初始化迭代器满足 ForwardIterator 类别或更强(参见 [forward.iterators] 第 2 段),则允许比较它们。一个值初始化的迭代器相当于一个空指针,所以你可以使用:

    if(it2==v2.cend()){
return std::vector<int>::iterator{};
}

然后调用者可以做:

std::vector<int>::iterator not_found{};
auto find_ten = ...
if (find_ten != not_found)
{
...
}

关于c++ - 在没有特定容器时检查迭代器是否未分配给项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38807762/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com