C++ 是c++;正向/双向/随机迭代器是否总是输出迭代器?

C++ 是c++;正向/双向/随机迭代器是否总是输出迭代器?,c++,stl,iterator,C++,Stl,Iterator,我在STL上看到许多文本(例如),它们暗示前向迭代器(以及扩展为Bidi和随机迭代器)必须同时满足输入和输出迭代器的要求。这对我来说似乎很奇怪,因为const迭代器显然是迭代器,但也显然不是输出迭代器 这种理解的真相是什么?我是否不理解输出迭代器的概念,或者输出迭代器是否不属于迭代器的扩展需求顺序?(这个想法有更好的/官方名称吗?我的意思是随机迭代器也是向前的Bidi迭代器…)C++03说(24.1/4): 除其类别外,一种前向、双向或随机接入 迭代器也可以是可变的或常量,具体取决于 表达式*i

我在STL上看到许多文本(例如),它们暗示前向迭代器(以及扩展为Bidi和随机迭代器)必须同时满足输入和输出迭代器的要求。这对我来说似乎很奇怪,因为
const
迭代器显然是迭代器,但也显然不是输出迭代器

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

C++03说(24.1/4):

除其类别外,一种前向、双向或随机接入 迭代器也可以是可变的或常量,具体取决于 表达式*i的结果表现为引用或引用 到一个常数。常量迭代器不满足 输出迭代器,以及表达式*i的结果(对于常量 迭代器i)不能用于左值为 必需的

cplusplus.com选择不提及这一点。标准中的措辞令人困惑,因为它声明“前向迭代器满足输入和输出迭代器的所有要求”,并与下一段中的说法相矛盾,即某些前向迭代器不满足输出迭代器的要求

C++11稍微简化了(24.2.1/3-4):

前向迭代器满足输入迭代器和 可在指定输入迭代器时使用;双向的 迭代器还满足前向迭代器和 可在指定前向迭代器时使用;随机存取 迭代器还满足双向迭代器的所有要求 并且可以在指定双向迭代器时使用

进一步满足输出迭代器要求的迭代器 称为可变迭代器。不可换迭代器称为 常量迭代器


是和否。迭代器还有一个限定条件: 它们是否允许序列突变。这个资格是 正交向前、双向等形式上,一个非变异 前向迭代器也必须是非变异输出迭代器。属于 当然,非变异输出迭代器没有多大意义, 一旦从输出迭代器中删除了变异运算符, 剩下的不多了,但更容易指定和描述 以这种方式处理迭代器,将变异/非变异视为 正交特性