算法是问题的解法,以有限的步骤,解决逻辑或数学上的问题。

    我们所编写的每个程序都是一个算法,其中的每个函数也都是一个算法,毕竟它们都是用来解决或大或小的逻辑问题或数学问题。STL收录的算法经过了数学上的效能分析与证明,是极具复用价值的,包括常用的排序,查找等等。特定的算法往往搭配特定的数据结构,算法与数据结构相辅相成。

    STL的算法部分主要由头文件组成。

    • 是所有STL头文件中最大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。
    • 体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。
    • 中则定义了一些模板类,用以声明函数对象。

      注:我们通常只使用第一个,也就是<algorithm>

    STL中算法大致分为四类:

    • 非可变序列算法:指不直接修改其所操作的容器内容的算法。
    • 可变序列算法:指可以修改它们所操作的容器内容的算法。
    • 排序算法:对序列进行排序和合并的算法、搜索算法以及有序序列上的集合操作。
    • 数值算法:对容器内容进行数值计算。

    其又可以简单的划分成两类:

    • 质变算法:是指运算过程中会更改区间内的元素的内容。例如拷贝,替换,删除等等
    • 非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等等