算法主要是由头文件<algorithm><functional><numeric>组成。
<algorithm>--STL头文件中最大的一个,范围涉及--比较、交换、查找、遍历操作、复制、修改等
<numeric>--体积很小,只包括几个在序列上面简单数学运算的函数模板
<functional>--定义了一些模板类,用以声明函数对象
1)常用遍历算法
1)for_each--遍历容器---3参数--开始,结束,普通函数/仿函数
2)transform---搬运容器到另一份容器--4参数--开始,结束,目标容器,仿函数
注意:目标容器必须要开辟空间才能压数据进去
2)常用查找算法
1)find--查找元素--3参数--开始,结束,需要查找元素
--找到就返回指定元素的迭代器,找不到返回迭代器结束位置
若是自定义数据类型,那么需要重载==,不然编译器不知道如何对比是否相等
2)find_if--按条件查找--3参数--开始,结束,查找规则仿函数
--返回迭代器类型
--比如查找大/小于多少等,需要自己写查找规则仿函数
3)adjacent_find--查找相邻重复元素--2个参数--开始,结束--面试可能会问
--找到就返回元素的迭代器,找不到返回迭代器结束位置
4)binary_search--二分法查找--3参数--开始,结束,需要查找的元素
--需要查找的序列必须是有序的序列
--返回类型为bool类型,找到返回真,未找到返回假
5)count--统计元素个数--3参数--开始,结束,需要查找的元素
--返回int类型
--自定义类型,要重载==
6)count_if--按条件统计元素个数---3参数--开始,结束,谓词_Pred
--返回int类型
3)常用排序算法
1)sort--对容器内部元素进行排序--3参数--开始,结束,排序方式(默认升序)
2)random_shuffle--洗牌,指定范围内的元素随机调整次序--2参数--开始,结束--记得加随机数种子,不然是伪随机
3)marge--容器元素合并,并存储到另一容器中--5参数--迭代器1开始,结束,迭代器2开始,结束,目标容器开始迭代器--注意两个容器必须是有序的
4)reverse--反转指定范围的元素--2参数--开始,结束
4)常用拷贝和替换算法
1)copy -- 容器指定范围元素拷贝到另一容器中--4参数--开始,结束,目标区间开始
2)replace--将容器内指定范围的旧元素修改为新元素--4参数--开始,结束,旧元素,新元素
3)replace_if-- 容器内指定范围满足条件的元素替换为新元素--4参数--开始,结束,谓词,新元素
4)swap--互换两个容器--2参数--容器1,容器2
5)常用算术生成算法--属于小型算法,使用时包含头文件<numeric>
1)accumulate--计算容器指定元素累计总和--3参数--开始,结束,元素
2)fill--向容器中添加元素--3参数--开始,结束,要填充的值
6)常用集合算法--5参数--容器1开始,结束,容器2开始,结束,目标容器开始
1)set_intersection--求两容器的交集
注意:
1)求交集的两个集合必须是有序序列
2)目标容器开辟空间从两个容器中取size()小值
3)返回值是交集中最后一个元素的位置
2)set_union--求两容器的并集
注意:
1)求交集的两个集合必须是有序序列
2)目标容器开辟空间从两个容器size()相加
3)返回值是交集中最后一个元素的位置
3)set_difference--求两容器的差集
注意:
1)求交集的两个集合必须是有序序列
2)目标容器开辟空间从两个容器中取size()大值
3)返回值是交集中最后一个元素的位置