迭代std :: vector而不使用vector.end()

Div*_*oML 0 c++ iterator

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)

Cal*_*eth 6

C++不是Python.阿一对std::vector::iterators的要求来表示的范围(开始和一个过去的端部).如果你只有一个迭代器,有什么你可以放心地用它做(除了它自身比较,这是空洞地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->++itit != endendnext()

  • @BenJones这仍然是范围的一半,即该范围的开始(或结束).如果您只有开头,则不知道范围结束的位置,反之亦然.当然迭代器可以指向第四个元素,但是如果你开始迭代,你会在哪里结束?四个元素以后?12?只要你没有范围的另一端,它就是未知数 (2认同)