如何识别vector迭代器是否到达vector的末端



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

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

这有时是有问题的,因为iter可能会碰到向量的末尾(如果'test'不在向量中),我会遇到一个错误。

我是否可以执行类似

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

和停止迭代没有指定我的向量在函数?谢谢你!

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

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. 传递迭代器
  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);
}

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

使用标准算法std::find, from <algorithm>

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

是,存在vec.end()。你可以查看这个参考资料http://www.cplusplus.com/reference/vector/vector/end/