迭代器对于任何自定义的类序列都是一个强大的附加工具。它允许我们将算法运用到有自定义类元素的容器上。可能会出现一种情形,没有可以满足我们需要的标准
STL 容器,这时候就需要定义一个自己的容器。我们的容器类可能需要迭代器。通过深入理解什么样的类(定义了迭代器)才能被 STL 所接受,可以让我们了解到 STL 内部发生了些什么。
STL迭代器的要求
STL 对定义了迭代器的类类型有一些特定的要求。这是为了保证所有接受这种迭代器的算法都可以正常工作。算法不需要知道,也不在乎它所处理的元素来自何种容器,但是它们在意传给它们作为参数的迭代器的特性。不同的算法要求不同功能的迭代器。我们在前面章节看到过这几类迭代器:输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器。我们总是可以在需要低级别迭代器的地方使用高级别迭代器。
定义算法的模板需要决定可传入迭代器的类别,用来验证所传入的迭代器的功能是否足够。知道迭代器参数的类别能为算法的应用提供潜在的优势,可以充分利用任何最少的额外功能让算法更加高效。
一般来说,必须用标准的方式确认迭代器的功能。不同类别的迭代器意味着需要为迭代器类定义不同的成员函数集。我们知道,迭代器类别具有功能叠加性,这当然也会反映到每种类别的成员函数集上。在探讨这些之前,先介绍一下函数模板如何使用迭代器。