简介
所有STL算法都被设计用来处理一个或多个迭代器区间,第一个区间通常是以起点和终点表示,至于其他区间,多数情况下只需要提供起点即可,其终点区间可自动以第一区间的元素数量推导出来。STL算法采覆盖(overwrite)模式而非安插(insert)模式,所有调用者必须保证目标区间拥有足够的元素空间,除非使用安插型迭代器适配器。
为了提高灵活性和功效,某些STL算法支持使用者传递自定义的操作,这些操作可以是一般函数,也可以是仿函数,如果其返回值是bool类型的,便称为条件判断式(predicate),条件判断式的主要作用,在其他博文里也有体会到,这里统一总结、记录下:
1、对于搜寻算法,我们可以传递一个函数或者仿函数,指定一个一元判断式作为搜寻准则。该一元判断式用来判断元素是否符合元素条件。
2、对于排序算法,我们可以传递一个函数或者仿函数,指定一个二元判断式作为排序准则,该二元判断式用来比较两元素。
3、我们可以传递一个一元判断式作为准则,判断是否应该对某元素施以某项运算,例如可以令奇数元素被移植。
4、我们可以为某个数值算法指定一个数值运算。
需要注意的是,判断式不应该在函数调用过程中改变其自身状态。
算法分类
首先介绍STL算法中两个特别的尾尺
1、尾词 _if
算法如果有两种形式,参数个数都相同,但第一个形式会要求传递一个值,第二种形式会要求传递一个函数或者仿函数,无_if尾词的那个是传递数值,有尾词_if要求传递函数或者仿函数。
2、尾词 _copy
这个尾词用来表示在此算法中,元素不关被操作,还会被复制到目标区间。
STL算法中大致可以按照以下几种进行分类,分别是:
1、非变动性算法(nonmodifying algorithms)
2、变动性算法(modifying algorithms)
3、移除性算法(removing algorithms)
4、变序性算法(mutating algorithms)
5、排序性算法(sorte algorithms)
6、已排序区间算法(sorted range algorithms)
7、数值算法(numeric algorithms)
非变动性算法
非变动性算法既不改动元素次序,也不改动元素值,它们透过input迭代器和forward迭代器完成工作,因此可以作用于所有标准容器身上.
变动性算法
变动性算法,要不直接改变元素值,要不就是在复制到另一个区间的过程中改变元素值,如果是第二种情况,原区间不会发生变化。
移除性算法
移除性算法是一种特殊的变动性算法,它们可以移除某区间内的元素,也可以在复制过程中执行移除操作。需要注意的是,移除算法只是在逻辑上移除元素,手段是:将不需要被移除的元素往前覆盖应被移除的元素,因此移除性算法并不改变操作区间内的元素个数,而是返回逻辑上的新终点。
变序性算法
变序性算法是,透过元素值的赋值和交换,改变元素序列,但不改变元素值.
排序算法
排序算法是一种特殊的变序性算法,但比一般的变序性算法更加复杂.
已序区间算法
已序区间算法,是指其所作用的区间在某种排序准则下已序。
数值算法
数值算法以不同方式组合数值元素