我有一个整数向量,我希望我的迭代器指向我想要的数字(称之为' test')。
vector<int> vec;
void find(std::vector<int>::iterator iter, int test)
{
if((*iter)!=test){ ++iter;}
}
这有时会产生问题,因为它可能会触及向量的末尾(如果&#39;测试&#39;不在向量中)并且我会遇到错误。
无论如何,我可以执行类似
的操作if(iter!=vec.end())
并停止迭代而不在函数中指定我的向量?谢谢!
答案 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)
对的想法:
我喜欢
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)
答案 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/