标准库并未给每一个容器添加大量功能,而是提供了一组算法,这些算法中的大多数都独立于任何特定的容器。这些算法是通用的(generic,或者叫做泛型的):它们可用于不同类型的容器和不同类型的元素。
10.1 概述
大多数算法都定义在头文件 algorithm 中。标准库还在头文件 numeric 中定义了一组数值泛型算法。
一般情况下,泛型算法不会直接对容器进行操作,而是遍历由两个迭代器指定的一个元素范围来进行操作。例如,假定我们有一个 int 的 vector,希望知道 vector 中是否包含特定值 val,可以调用标准库算法 find 来进行查找:
int val = 42;
auto result = find(vec.cbegin(), vec.cend(), val);
find 将范围中每个元素与给定值进行比较。返回指向第一个等于给定值的元素的迭代器。如果范围内无匹配元素,则 find 返回第二个参数(在上例中,第二个参数是尾后迭代器)来表示搜索失败。
算法如何工作
find 的工作是在一个未排序的元素序列中查找一个特定元素。正如我们所想的那样,find 会对迭代器范围进行顺序遍历,直到找到目标值或查找失败返回迭代器范围的右边界。
迭代器令算法不依赖于容器,但算法依赖于元素类型的操作
大多数泛型算法都使用了一个(或多个)元素类型上的操作。例如,find 用元素类型的 == 运算符来完成每个元素与给定值的比较。