【问题标题】:What's the difference between input iterators and read-only forward iterators?输入迭代器和只读前向迭代器有什么区别?
【发布时间】:2012-02-10 18:00:38
【问题描述】:

输入迭代器和只读前向迭代器有什么区别?

由于后者是只读的,它们显然不能满足输出迭代器的要求。并且,正因为如此,它们实际上是具有额外保证(如果有的话)的输入迭代器。问题是,有哪些额外的保证?

我的猜测是,前向迭代器是多通道的,而输入迭代器不是,对吗?

【问题讨论】:

    标签: c++ iterator c++-standard-library


    【解决方案1】:

    是的,输入迭代器是一次性迭代器。您只能对它们进行一次迭代,而前向迭代器是多遍的。

    来自§24.2.3 [input.iterators] p2 (the table)++r 的前置/后置列:

    pre:r 是可取消引用的。
    post: r 是可解引用的或 r 是过去的。
    post: r 的先前值的任何副本不再需要可解引用或在域中的==

    最后一个后置条件意味着对于a == b++a == ++b 不需要是true
    相同的条款,第 3 段:

    [ 注意: 对于输入迭代器,a == b 并不意味着 ++a == ++b。 (相等性不保证替换属性或引用透明性。)输入迭代器的算法不应该尝试通过同一个迭代器两次。它们应该是单程算法。 [...] 这些算法可以通过istream_iterator 类模板与 istreams 一起用作输入数据的来源。 ——尾注 ]

    来自§24.2.5 [forward.iterators]

    p1 一个类或指针类型X满足前向迭代器if的要求

    • [...]
    • X 类型的对象提供多次通过保证,如下所述。

    p3 X 类型的两个可解引用迭代器 a 和 b 提供 多次通过保证,如果:

    • a == b 暗示 ++a == ++b
    • X 是指针类型或表达式(void)++X(a), *a 等价于表达式*a

    【讨论】:

    • 所以典型的例子可能是流迭代器(single-pass, input-iterator),单链表(multi-pass forward iterator)
    • 哦,顺便说一句,上船。 +1
    猜你喜欢
    • 2014-12-05
    • 2010-11-04
    • 2018-01-28
    • 2019-10-25
    • 2012-12-13
    • 2012-06-14
    • 2011-07-17
    • 2020-04-14
    • 2014-01-20
    相关资源
    最近更新 更多