这里是 C++ 菜鸟。我写了一个从 vector 返回迭代器的函数,我想用这个迭代器从头到尾遍历 vector 。然而, vector 迭代器是这样使用的
for (auto iterator = vec.begin(); iterator != vec.end(); iterator ++) {
// do something here
}
这意味着我还需要一个 vec.end() 才能工作。无论如何我只能使用 vec.begin() 来遍历 vector ,就像我在 python 中通常做的那样
for value in some_iterator:
# do something
编辑:一些不相关的更新:
我看到一些关于我的 python 迭代器和 iterable 的评论。迭代器确实可以这样使用(至少在 Python 3 中)。例如:
some_list = [1,2,3,4]
some_iterator = iter(some_list)
for value in some_iterator:
print(value)
最佳答案
C++ 不是 Python。需要对 std::vector::iterator
来表示范围(起点和终点一个)。如果您只有一个 Iterator,那么没有什么可以安全地使用它(除了将它与自身进行比较,这是空洞的 true
)。
你混淆了 Python iterable 的 python 概念,这是一个值序列。这与 Python iterator 不同,它是一个带有 next()
(Python 3 中的 __next__()
)的对象,返回下一个值或抛出 StopIteration
for value in some_iterable:
#do something here
大致对应
_iter = some_iterable.__iter__()
while True:
try
value = _iter.__next__()
except StopIteration:
break;
#do something here
你可能想要一个范围语句
for (auto val : vec){
// do something here
}
大致对应
{
auto && __range = vec;
for (auto __begin = begin(__range), __end = end(__range); __begin != __end; ++__begin) {
auto val = *__begin;
// do something here
}
}
(在这两个版本中,以_
开头的局部变量实际上并不存在,名称是说明性的)
C++ 迭代器将值的返回(*it
和it->
)从移动(++it
等)中分离出来;从停止 (it != end
) 开始,end
指向最后一个元素过去。 Python 迭代器在 next()
中完成这一切。
关于c++ - 不使用 vector.end() 迭代 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51597626/