算法概述
在讲解STL算法时,我们分别从算法的头文件、算法的分类两个方面来讲解。
1、算法的头文件
STL中提供的所有算法都包含在三个头文件中:<algorithm>、<numeric>、<functional>,其中头algorithm是在头文件中最大的,它由一大堆函数模板组成,其中涉及到的功能有比较、交换、查找、遍历、复制、修改、删除、合并、排序等。
头文件numeric很小,只包括几个在序列中进行简单数学运算的函数模板,以及加法和乘法在序列中的一些操作。
头文件functional中则定义了一些类模板,用于声明一些函数对象。
2、算法的分类
STL中的算法大致可分为4类:
● 不可变序列算法:此类算法不改动容器中元素的次序,也不改动元素值,一般通过input迭代器和forward迭代器来完成工作,可用于所有的标准容器。
● 可变序列算法:此算法一般不直接修改容器中的元素值,它有可能在将元素复制到另一区间的过程中改变元素的值。可变序列算法还包括了移除性质和删除性质的算法,移除一般只是在逻辑上“移除”元素,不改变容器的大小和容器中元素的个数,“移除”和“删除”是不同的算法。
● 排序算法:STL中一系列算法都与排序有关,其中包括对序列进行排序、合并的算法、搜索算法、有序序列的集合操作以及堆操作相关算法,所有这些算法都是通过对序列元素的比较操作来完成的。排序一般是通过对容器中元素的赋值和交换,改变元素顺序,排序算法的复杂度通常低于线性算法,要运用随机存取迭代器。
● 数值算法:数值算法主要是对容器中的元素进行数值计算,例如区间内容的累积、相邻元素差等。
STL中算法虽然庞大,但这样划分归类之后,就变得清晰有序,学习起来也不会毫无头绪,那么接下来的章节我们就分别来详细学习一下这几类算法。