我在STL上看到很多文本(例如http://www.cplusplus.com/reference/std/iterator/),这意味着前向迭代器(以及扩展的Bidi和Random迭代器)必须满足输入和输出迭代器的要求.这对我来说似乎很奇怪,因为const迭代器显然是迭代器,但显然不是输出迭代器.
这种理解的真相是什么?我不理解输出迭代器的概念,或者输出迭代器不属于迭代器的扩展需求顺序吗?(这个想法有更好/官方名称吗?我的意思是随机迭代器也是Bidi迭代器也是前向...)
C++ 03说(24.1/4):
除了它的类别之外,正向,双向或随机访问迭代器也可以是可变的或常量的,这取决于表达式*i的结果是作为引用还是作为对常量的引用.常量迭代器不满足输出迭代器的要求,并且表达式*i(对于常量迭代器i)的结果不能在需要左值的表达式中使用.
cplusplus.com选择不提.标准中的措辞令人困惑,因为它声明"前向迭代器满足输入和输出迭代器的所有要求",并且与下一段中的说法相矛盾,即某些前向迭代器不满足输出迭代器的要求.
C++ 11简化了一点(24.2.1/3-4):
前向迭代器满足输入迭代器的所有要求,并且可以在指定输入迭代器时使用; 双向迭代器也满足前向迭代器的所有要求,并且可以在指定前向迭代器时使用; 随机访问迭代器也满足双向迭代器的所有要求,并且可以在指定双向迭代器时使用.
进一步满足输出迭代器要求的迭代器称为可变迭代器.不可变迭代器称为常量迭代器.