泛型,表明是“普适的”,即不依赖于容器类型,甚至不是容器也可以使用,它提供了一些经典算法的公共接口。
算法所依赖的仅仅是“迭代器”,所有具有迭代器的容器(包括不是容器的string,内置数组类型等)均可使用算法。
如find函数,所有具有迭代器的容器(…)均可以使用这个函数完成查询功能。
但是,对于find函数来说,需要进行比较(==)的操作,这个就依赖于元素类型。不仅仅是find函数,其他的一些算法也基本上需要使用比较操作(< >等),这些行为都需要元素本身支持比较操作。
不过大多数算法提供了一种方法,允许我们使用自定义的操作来代替默认的运算符。
总之一句话:
迭代器令算法不依赖于容器,但算法依赖于元素类型的操作。
所以,泛型算法本身不会执行容器操作,它们只运行于迭代器之上,执行迭代器的操作。从而造成了一个结果:
算法永远不会改变底层容器的大小。
算法可能改变容器内元素的值,或者在容器内移动元素,但是永远不会直接添加和删除元素。
算法可以通过迭代器进行删除或插入操作,但是这是间接完成的,而不是算法本身直接操作的。迭代器可以完成向容器添加元素的效果,但是算法本身永远不会做这样的操作。