如果使用容器定义的操作或者增加少量的代码就能满足某些要求,那么尽量不要使用泛型算法,所有的泛型算法见《C++ Primer》第5版 p770。下面仅列出比较实用,但自己实现有些麻烦的泛型算法。
(1)二分搜索算法 binary_search(beg,end,val) binary_search(beg,end,val,comp) comp是自定义的用于比较两个元素类型是否相等的函数 (2)排序算法 sort(beg,end) stable_sort(beg,end) sort(beg,end,comp) stable_sort(beg,end,comp) comp是自定义的用于比较两个元素类型大小的函数 (3)重排算法 unique(beg,end) 要先进行sort使得重复元素相邻,然后才可以使用此算法对相邻的重复元素, 通过覆盖它们来进行“删除”,参考《C++ Primer》第5版 p343 unique(beg,end,binaryPred) binaryPred是自定义的用于比较相邻两个元素类型是否相等的函数 random_shuffle(beg,end) 混洗输入序列中的元素 random_shuffle(beg,end,rand) 生成(0,rand)区间内的服从均匀分布的随机整数 shuffle(beg,end,Uniform_rand) Uniform_rand必须满足均匀分布随机生成器的要求(这好像是一个可调用的函数名?) (4)有序序列的集合算法 注意,使用下面这些算法要求序列已经是有序的。这些算法提供了类似集合操作的行为,适用于普通顺序容器,但是标准容器set反而没有提供这些行为。参考《C++ Primer》第5版 p779。 includes(beg,end,beg2,end2) includes(beg,end,beg2,end2,comp) set_union(beg,end,beg2,end2,dest) set_union(beg,end,beg2,end2,dest,comp) set_intersection(beg,end,beg2,end2,dest) set_intersection(beg,end,beg2,end2,dest,comp) set_difference(beg,end,beg2,end2,dest) set_difference(beg,end,beg2,end2,dest,comp) set_symmetric_difference(beg,end,beg2,end2,dest) set_symmetric_difference(beg,end,beg2,end2,dest,comp) (5)最小值和最大值 有18个算法,此处不一一列出,参考《C++ Primer》第5版 p779。 (6)数值算法 上面提到的算法都定义在<algorithm>中,数值算法定义在<numeric>中 accumulate(beg,end,init) 对序列中所有值进行累加求和,初始值为init,使用元素类型的+运算符 accumulate(beg,end,init,binaryPred) 使用指定的二元操作binaryPred inner_product(beg1,end1,beg2,init) 对两个序列求内积,即对应元素的积的和,和的初始值为init inner_product(beg1,end1,beg2,init,binop1,binop2) 使用binop1代替加法,binop2代替乘法 (7)随机数 很少用到,不一一列出,参考《C++ Primer》第5版 p781。