泛型算法的的一大优点是“泛型”,也就是一个算法可以用于多个不同类型的数据类型,这也是STL的核心——算法与所操作的数据结构分离。
我们知道,迭代器的功能之一便是为算法进行服务,那么它是如何服务于算法的呢?要做到数据结构与算法分离,重要的技术手段就是使用迭代器作为两者之间的桥梁。可以说,算法根本就不知道有容器这个东西存在,它从来不对容器进行任何操作,只是对通过迭代器传输进来的一段序列进行处理,因此它从来不与特定的容器所绑定,从而实现了泛型。每个容器都有自己特定的迭代器,但是对于算法来说,既然是泛型算法,那么也是用模板来进行的,因此他可以容下不同类型的迭代器。
算法只能通过迭代器来访问到特定范围内的序列,因此它只能对这些序列的元素进行读取、改变、移动,但是无法对其进行增添与删除。但是,我们可以通过插入迭代器来对容器进行增删的操作,这并不与上面所讲的有冲突。算法将传输进来的序列经过处理后交给插入迭代器,算法的工作便完成了,接下来插入迭代器通过调用一些底层的操作来实现对容器的增删,这是迭代器的工作而不是算法的工作。因此,能不能对容器进行插入和删除的操作,不在于算法,而在于传递给它的迭代器是否有这样的能力。
接下来我们看一个例子
vector<int> ivec;
ivec