是C 正向/BIDI/随机迭代器总是输出迭代器

Are c++ forward/bidi/random iterators always output iterators?

本文关键字:迭代器 输出 BIDI 正向 随机      更新时间:2023-10-16

我在stl上看到了许多文本(例如http://www.cplusplus.com/reference com/reference/std/iterator/),暗示着迭代器(以及通过扩展bidi和随机迭代器))必须满足输入和输出迭代器的要求。这对我来说似乎很奇怪,因为const迭代器显然是迭代器,但显然是不是输出迭代器。

这种理解的真相是什么?我是否不了解输出迭代器的概念,还是输出迭代器不属于迭代器的不断扩展的需求顺序?(这个想法有一个更好的/官方名称吗?我的意思是,随机迭代器也是bidi迭代器的想法,也是前进的...)

c 03说(24.1/4):

除了其类别,前向,双向或随机访问 迭代器也可能是可变的,也可能是恒定的,具体取决于 表达式 *i作为参考或参考的结果 恒定。不断的迭代器不满足对的要求 输出迭代器和表达式 *i的结果(对于恒定 迭代器i)不能在lvalue是的表达式中使用 需要。

cplusplus.com选择了这一点。标准中的措辞令人困惑,因为它指出"正向迭代器满足输入和输出迭代器的所有要求",并且与下一段说某些远程迭代器不满足输出迭代器的要求。p> C 11简化了一点(24.2.1/3-4):

向前迭代器满足输入迭代器的所有要求, 每当指定输入迭代器时都可以使用;双向 迭代器还满足远期迭代器和 可以在指定前进迭代器时使用;随机访问 迭代器还满足双向迭代器的所有要求 并且可以在指定双向迭代器时使用。

迭代器进一步满足输出迭代器的要求 称为可变迭代器。不可卸下的迭代器被称为 持续的迭代器。

是,否。还有另一个适用于迭代器的资格:它们是否允许突变序列。这个资格是正交向前,双向等,正式,非杂音正向迭代器也必须是非突出输出迭代器。的当然,一个非突出输出迭代器并没有多大意义,一旦您从输出迭代器中删除了突变的操作员,剩下的不多,但是更容易指定和描述以这种方式进行迭代,将突变/非变形视为正交特征。