概念
一般情况下,泛型算法本身不会执行容器的操作,它们只会运行于迭代器之上,执行迭代器的操作。
泛型算法的一大优点是 “泛型”,也就是一个算法可用于多种不同的数据类型,算法与所操作的数据结构分离。这对编程效率的提高是非常巨大的。
要做到算法与数据结构分离,重要的技术手段就是使用迭代器作为两者的桥梁。算法从不操作具体的容器,从而也就不存在与特定容器绑定,不适用于其他容器的问题。算法只操作迭代器,由迭代器真正实现对容器的访问。不同容器实现自己特定的迭代器(但不同迭代器是相容的),算法操作不同迭代器就实现了对不同容器的访问。
因此,并不是算法应该改变或不该改变容器的问题。 为了实现与数据结构的分离,为了实现通用性,算法根本就不该知道容器的存在。 算法访问数据的唯一通道是迭代器。是否改变容器大小,完全是迭代器的选择和责任。
除了少数例外,标准库算法都对一个范围内的元素进行操作。我们将此元素范围称为“输入范围”。接受输入范围的算法总是使用前两个参数来表示此范围,两个参数分别是指向要处理的第一个元素和尾元素之后位置的迭代器。
find()函数
以find()函数为例来理解。传递给find的前两个参数是表示元素范围的迭代器,第三个参数是一个值。find将范围中每个元素与给定值进行比较。它返回指向第一个等于给定值的元素的迭代器。如果范围中无匹配元素&#