如何识别向量迭代器是不是已到达向量末尾?
Posted
技术标签:
【中文标题】如何识别向量迭代器是不是已到达向量末尾?【英文标题】:How to identify if vector iterator has reached end of vector?如何识别向量迭代器是否已到达向量末尾? 【发布时间】:2015-06-04 08:03:14 【问题描述】:我有一个整数向量,我希望我的迭代器指向我想要的数字(称之为“测试”)。
vector<int> vec;
void find(std::vector<int>::iterator iter, int test)
if((*iter)!=test) ++iter;
这有时会出现问题,因为 iter 可能会到达向量的末尾(如果 'test' 不在向量中),我会遇到错误。
无论如何我可以执行类似的操作
if(iter!=vec.end())
并停止迭代而不在函数中指定我的向量?谢谢!
【问题讨论】:
在你的特殊情况下,你为什么不直接使用std::find()
?
【参考方案1】:
您可以采用标准库方法并将一对迭代器传递给函数:
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()) ....
【讨论】:
他希望迭代器指向数字(或 end())。这段代码(至少是第一个版本)没有按照他的要求做 @MarcoA。它怎么不这样做? 如果我没看错,他想要一个迭代器以某种方式返回,指向所要求的值 @MarcoA。是的,但是他们在询问如何在没有将向量传递给函数的情况下获取结束迭代器。....
是找到数字的迭代器的位置。
也许你是对的。我不能就目前的问题说。对我来说很好,很抱歉打扰:)【参考方案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);
Example
无论如何你都可以使用std::find
(http://en.cppreference.com/w/cpp/algorithm/find)
【讨论】:
通过引用传递迭代器似乎很奇怪。这肯定不是标准库中采用的方法。I want my iterator to point to my desired number
。我想他要么想修改他的迭代器,要么得到一个作为回报。仍然:最好使用 std::find。【参考方案3】:
使用标准算法 std::find,来自<algorithm>
auto it = std::find(vector.begin(), vector.end(), value);
【讨论】:
【参考方案4】:是的,vec.end() 存在。 您可以检查此参考 http://www.cplusplus.com/reference/vector/vector/end/
【讨论】:
以上是关于如何识别向量迭代器是不是已到达向量末尾?的主要内容,如果未能解决你的问题,请参考以下文章
使用迭代器成员函数“empty()”是不是仅适用于某些向量类型?