改善(Refinement)
输入迭代器实际上是一个比较薄弱的概念:它必须的要求很少。输入迭代器必须支持指针的算术运算的一个子集(使用前缀和后缀操作符+来增加输入迭代器)),但是并不是需要指针所有的算术运算。这对于find算法已经足够了,但是一些另外的算法的参数需要满足额外的要求。reverse算法,它的参数的“减少”(decrement)功能必须要像“增加”(increment)功能一样的,它使用表达式 --last。在概念方面,我们说revers算法的参数必须是双向迭代器(Bidirectional Iterator)模式,而不是输入迭代器。
双向迭代器概念非常类似于输入迭代器概念:它只是简单的增加了一些额外的要求。双向迭代器模式类型是输入迭代器模式类型的一个子集。任何一个类型,如果它是双向迭代器模式,那么它肯定也是输入迭代器模式。例如,int*,既是双向迭代器模式又是输入迭代器模式。但istream_iterator,只是一个输入迭代器模式。它不符合更严格的双向迭代器的要求。双向迭代器是输入迭代器的一个改进。改进这个概念就跟c++类中的继承非常相似:我们使用不同的词,而不叫它“继承”的最主要的原因是强调“改进”的概念而不是实际类型。
除了我们已经讨论的两个迭代器概念,其实还有另外三个迭代器概念:这5个迭代器概念有输出迭代器,输入迭代器,前向迭代器,双向迭代器和随机访问迭代器;前向迭代器是输入迭代器的改进,双向迭代器是前向迭代器的改进,随机访问迭代器是双向迭代器的改进。输出迭代器与其他四个迭代器是有关系的,担不是一部分层次的改进:它不是任何其他迭代器概念的改进,也没有其他迭代器是从改进它而来的。迭代器概述有更多关于迭代器一般的消息。
容器类,像迭代器一样,被组织成一个层次的概念。所有容器都是容器概念模式;更完善的概念;如序列和关联容器,描述特定类型的容器。
下一节 《STL的其他部分》
posted on 2012-02-28 10:33
canaan 阅读(2283)
评论(0) 编辑 收藏 引用 所属分类:
外文翻译