我有一个整数向量,我想让迭代器指向我想要的数字(称之为'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()) { .... }
一个对的想法:
- 通过 传递迭代器
- 标准库通常通过传递开始-结束对来工作,因此您可以根据需要调整范围
我会选择像
这样的字体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/