概述
算法主要是由头文件<algorithm> <functional> <numeric>组成。
<algorithm>是所有STL头文件中最大的一个,范围涉及到比较、交换、查找、遍历操作、复制、
修改等等。
<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数。
<functional>定义了一些模板类,用以声明函数对象。
常用遍历算法
for_each
for_each //遍历容器
transform //搬运容器到另一个容器中
transform
搬运容器到另一个容器
transform(iterator beg1,iterator end1,iterator beg2,_func);
beg1源容器开始迭代器
end1源容器结束迭代器
beg2目标容器开始迭代器
_func函数或者函数对象
find
查找指定元素找到返回指定元素的迭代器,找不到返回结束迭代器end()
find(iterator beg,iterator end,value);
find_if
按条件查找元素
find_if(iterator beg,iterator end,_Pred); //按值查找元素,找到返回指定位置迭代器,
//找不到返回结束迭代器位置,_Pred函数或谓词
adjacent_find
查找相邻重复元素
adjacent_find(iterator beg,iterator end);
binary_search
查找指定元素是否存在,查到返回true否则false。
在无序序列中不可用
boll binary_search(iterator beg,iterator end,value); //
count
统计元素个数
count(iterator beg,iterator end,value);
count_if
按条件统计元素个数
count_if (iterator beg,iterator end,_Pred);
常用排序算法
sort
对容器内元素进行排序
sort(iterator beg,iterator end,_Pred); //按值查找元素,找到返回指定位置迭代器
//找不到返回结束迭代器位置
random_shuffle
洗牌,指定范围内的元素随机调整次序
random_shuffle((iterator beg,iterator end);
merge
两个容器元素合并,并存储到另一容器中,两个容器必须是有序的
merge(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
reverse
将容器内元素进行反转
reverse(iterator beg,iterator end);
常用拷贝和替换算法
copy
容器内指定范围的元素拷贝到另—容器中
copy(iterator beg,iterator end,iterator dest); //按值查找元素,找到返回指定位置迭代器
//找不到返回结束迭代器位置
replace
将容器内指定范围的l日元素修改为新元素
replace(iterator beg,iterator end,oldvalue,newvalue);
replace_if
将区间内满足条件的元素,替换成指定元素
replace_if(iterator beg,iterator end,_Pred,newvalue);
swap
互换两个容器的元素
swap(container c1,container c2);
常用算数生成算法
算术生成算法属于小型算法,使用时包含的头文件为#include <numeric>
accumulate
计算区间内容器元素累计总和
accumulate(iterator beg,iterator end,value); //value起始值
fill
向容器中填充指定的元素
fill(iterator beg,iterator end,value); //value填充的值
常用集合算法
set_intersection
求两个容器交集
set_intersection(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
//dest目标容器开始迭代器
set__union
求两个容器并集
set_union(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
set_difference
求两个容器差集,两个集合必须是有序序列。
set_different(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);