STL算法分类

STL 中,算法就是函数模板。STL 中的算法大多数是用来对容器进行操作的,如排序、 查找等。大部分算法都是在头文件 <algorithm> 中定义的,还有些算法用于数值处理,定义在头文件 <numeric> 中。

不同的教程对 STL 中的算法有不同的分类方法。本教程将算法分为以下七类:
  1. 不变序列算法。
  2. 变值算法。
  3. 删除算法。
  4. 变序算法。
  5. 排序算法。
  6. 有序区间算法。
  7. 数值算法。

本教程介绍前六类算法。第七类算法共有三个,除了前面已经介绍过的 accumulate 以外,另外两个算法既不常用,讲解起来又比较烦琐,本教程就不介绍了,有需要的读者可自行查阅相关资料。

有的算法可能同时属于多个分类。

许多算法都是重载的,有不止一个版本。篇幅所限,本教程往往只能列出其中的一个版本。有些算法也不给出原型,直接通过程序来演示其用法。

实际上,大多数重载的算法都有两个版本,其中一个用==判断元素是否相等,或用<比较大小;而另一个版本多出来一个类型参数 Pred 以及函数形参 Pred op,该版本通过表达式op(x, y)的返回值是 true 还是 false 来判断 x 是否“等于”y 或者“小于”y。例如,在《C++函数对象详解》一节中的“应用实例2”中提到的 sort,再如下面有两个版本的 min_element:

iterate min_element(iterate first, iterate last);
iterate min_element(iterate first, iterate last, Pred op);

min_element 返回区间中最小的元素。第一个版本用<比较大小,而第二个版本用自定义的比较器 op 来比较大小,op(x, y) 的值为 true,则说明 x 比 y 小。

类似 sort 和 min_element 这样有可自定义比较器版本的算法,在后文的表格中列出时,将加注“(可自定义比较器)”。