如何识别向量迭代器是否已到达向量的末尾?

时间:2015-06-04 08:03:15

标签: c++ vector iterator

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

vector<int> vec;
void find(std::vector<int>::iterator iter, int test)
{
    if((*iter)!=test){ ++iter;}
}

这有时会产生问题,因为它可能会触及向量的末尾(如果&#39;测试&#39;不在向量中)并且我会遇到错误。

无论如何,我可以执行类似

的操作
if(iter!=vec.end())

并停止迭代而不在函数中指定我的向量?谢谢!

4 个答案:

答案 0 :(得分:8)

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

template <typename Iterator>
void foo(Iterator begin, Iterator end,
         typename std::iterator_traits<Iterator>::value_type test)
{
  Iterator it = begin;
  ....
  if (iterator != end) { ... }
}

然后你必须找出一个算法来找到指向值等于test的元素的迭代器。或者只需致电std::find并放弃您的功能。

auto it = std::find(vec.begin(), vec.end(), test);
if (it != vec.end()) { .... }

答案 1 :(得分:2)

的想法:

  1. 您按值传递迭代器
  2. 标准库通常通过传递一对开始结束,因此您可以根据需要调整范围
  3. 我喜欢

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

    Example

    无论如何,你可以使用std::findhttp://en.cppreference.com/w/cpp/algorithm/find

答案 2 :(得分:1)

使用标准algo std :: find,来自<algorithm>

auto it = std::find(vector.begin(), vector.end(), value);

答案 3 :(得分:-2)

是的,vec.end()存在。 您可以查看此参考 http://www.cplusplus.com/reference/vector/vector/end/