C++ 如何确定向量迭代器是否已到达向量的末尾?

C++ 如何确定向量迭代器是否已到达向量的末尾?,c++,vector,iterator,C++,Vector,Iterator,我有一个整数向量,我希望我的迭代器指向我想要的数字(称之为“test”) 然后停止迭代,而不在函数中指定我的向量?谢谢大家! 您可以采用标准库方法,向函数传递一对迭代器: template <typename Iterator> void foo(Iterator begin, Iterator end, typename std::iterator_traits<Iterator>::value_type test) { Iterator it =

我有一个整数向量,我希望我的迭代器指向我想要的数字(称之为“test”)


然后停止迭代,而不在函数中指定我的向量?谢谢大家!

您可以采用标准库方法,向函数传递一对迭代器:

template <typename Iterator>
void foo(Iterator begin, Iterator end,
         typename std::iterator_traits<Iterator>::value_type test)
{
  Iterator it = begin;
  ....
  if (iterator != end) { ... }
}
是,存在vec.end()。 您可以查看此参考

使用标准的algo std::查找,从

一对想法:

  • 您正在按值传递迭代器
  • 标准库通常通过传递开始-结束对来工作,这样您就可以根据需要调整范围
  • 我喜欢这样的东西

    if(iter!=vec.end())
    
    vector<int> vec;
    void find(std::vector<int>::iterator& iter, std::vector<int>::iterator end, int test)
    {
        while (iter != end) { 
            if (*iter == test)
                return;
            ++iter;
        }
    }
    
    int main()
    {
        vector<int> a = { 2,3,4 };
        std::vector<int>::iterator it = a.begin();
        find(it, a.end(), 5);
    }
    
    vec;
    void find(std::vector::iterator&iter,std::vector::iterator end,int test)
    {
    而(iter!=结束){
    if(*iter==试验)
    返回;
    ++iter;
    }
    }
    int main()
    {
    向量a={2,3,4};
    std::vector::iterator it=a.begin();
    查找(it,a.end(),5);
    }
    


    无论如何,您可以在特定情况下使用
    std::find
    ()

    ,为什么不使用
    std::find()
    ?他希望迭代器指向数字(或结束()。这段代码(至少是第一个版本)不符合他的要求asked@MarcoA. 如果我读对了,他希望以某种方式返回一个指向该值的迭代器asked@MarcoA. 是的,但是他们在问如何在不将向量传递给函数的情况下获取结束迭代器。
    是找到数字迭代器的地方。也许你是对的。从目前的问题来看,我不能说。对我来说很好,抱歉打扰了:)通过引用传递迭代器似乎很奇怪。这当然不是标准库中采用的方法。
    我希望迭代器指向我想要的数字。我想他要么想修改迭代器,要么想得到一个迭代器作为回报。不过:使用std::find会更好。
    
    auto it = std::find(vec.begin(), vec.end(), test);
    if (it != vec.end()) { .... }
    
    auto it = std::find(vector.begin(), vector.end(), value);
    
    vector<int> vec;
    void find(std::vector<int>::iterator& iter, std::vector<int>::iterator end, int test)
    {
        while (iter != end) { 
            if (*iter == test)
                return;
            ++iter;
        }
    }
    
    int main()
    {
        vector<int> a = { 2,3,4 };
        std::vector<int>::iterator it = a.begin();
        find(it, a.end(), 5);
    }