13.5.3 为什么要定义这么多迭代器

    不同的算法要求的迭代器类型不同,之所以定义了5种迭代器,是为了使用“最合适”的工具,编写算法时在满足要求的基础上尽可能地使用功能少的迭代器,减少迭代器引入的副作用,假设要编写一个查找函数find的程序,只要能读取容器中的元素即可,最理想的方案是使用输入迭代器,这样,有效防止了在find函数内对元素的修改,真正实现“物尽其用”,正如指针一章中曾经介绍的,一把刀既能削铁如泥,又能砍瓜切菜,还能理发,但是真正用其理发是很危险的,不如剃头刀来的安全方便。

    对5种迭代器初步了解后,重新看一下图13.1,实际上,依照箭头的方向,迭代器实现的功能越来越少,除了输出迭代器和输入迭代器是功能相反的并列关系外,箭头左侧的迭代器不仅能够实现右侧迭代器所有的功能,还在其基础上增加了一些功能。所以说,箭头左侧的迭代器“适应”于箭头右侧的迭代器,因此,如果某个算法的形参为前向迭代器,则实参可以是双向迭代器和随机访问迭代器,但不能是输出迭代器或输入迭代器。

    根据特定迭代器类型编写的算法可以使用该种迭代器,还可以使用具有其所有功能的迭代器,从这个意义上说,随机访问迭代器最强大,几乎可以适用于任何的算法。

    迭代器实现的功能汇总如表13.7所示,■代表此迭代器有此功能,而□代表没有,其中p为迭代器变量。

    13.5.3 为什么要定义这么多迭代器 - 图1