C++新秀在这里.我编写了一个函数,它从向量中返回一个迭代器,我想使用这个迭代器从头到尾迭代向量.但是,矢量迭代器就像这样使用
for (auto iterator = vec.begin(); iterator != vec.end(); iterator ++) {
// do something here
}
Run Code Online (Sandbox Code Playgroud)
这意味着我还需要一个vec.end()来实现这一点.无论如何我只能使用vec.begin()迭代一个向量,就像我在python中常见的那样
for value in some_iterator:
# do something
Run Code Online (Sandbox Code Playgroud)
编辑:一些不相关的更新:
我看到一些关于我的python iterator和iterable的评论.迭代器确实可以这种方式使用(至少在Python 3中).例如:
some_list = [1,2,3,4]
some_iterator = iter(some_list)
for value in some_iterator:
print(value)
Run Code Online (Sandbox Code Playgroud)
C++不是Python.阿一对的std::vector::iterator
s的要求来表示的范围(开始和一个过去的端部).如果你只有一个迭代器,有什么你可以放心地用它做(除了它自身比较,这是空洞地true
).
你混淆了Python 迭代的python概念,它是一系列值.这与Python 迭代器不同,Python 迭代器是一个具有next()
(__next__()
在Python 3中)返回下一个值或抛出的对象StopIteration
for value in some_iterable:
#do something here
Run Code Online (Sandbox Code Playgroud)
这粗略对应
_iter = some_iterable.__iter__()
while True:
try
value = _iter.__next__()
except StopIteration:
break;
#do something here
Run Code Online (Sandbox Code Playgroud)
你可能想要一个ranged-for语句
for (auto val : vec){
// do something here
}
Run Code Online (Sandbox Code Playgroud)
这粗略对应
{
auto && __range = vec;
for (auto __begin = begin(__range), __end = end(__range); __begin != __end; ++__begin) {
auto val = *__begin;
// do something here
}
}
Run Code Online (Sandbox Code Playgroud)
(在两个版本中,带有前导的局部变量_
实际上不存在,名称是说明性的)
C++迭代器拆分从移动(等)中返回值(*it
和); 并且来自stops(),其中第一点超过最终元素.Python迭代器完成所有工作.it->
++it
it != end
end
next()
归档时间: |
|
查看次数: |
247 次 |
最近记录: |