目录
前言
#include <algorithm>是C++的标准模版库(STL)中最重要的头文件之一,提供了大量基于迭代器的非成员模板函数。
具体包括:非修改序列操作、修改序列操作、分区操作、排序操作、二分查找操作、合并操作、堆操作、最大最小值操作、其它操作
本文详细记录该库中函数的使用方法及常用函数的解释
一、非修改序列操作(12个)
1.for_each()
对序列中的每个元素执行某操作
for_each(v1.begin(),v1.end(),add);//将v1执行add方法
2.find()
在序列中找出某个值的第一次出现的位置。利用底层元素的等于操作符,对范围内的元素与输入的值进行比较。当匹配时,结束搜索,返回该元素的一个InputIterator
find(v1.begin(),v1.end(),value);//在v1中找到value的索引值
3.find_if()
在序列中找出符合某谓词的第一个元素
4.find_end()
在序列中找出一子序列的最后一次出现的位置
5.find_first_of()
在序列中找出第一次出现指定值集中之值的位置
6.adjacent_find()
在序列中找出相邻的一对值
7.count()
在序列中统计某个值出现的次数
count(v1.begin(),v1.end(),value);//统计v1中value出现的次数
8.count_if()
在序列中统计与某谓词匹配的次数
9.mismatch()
比较:找出两个序列相异的第一个元素
10.equal()
两个序列中的对应元素都相同时为真
11.search()
在序列中找出一子序列的第一次出现的位置
12.search_n()
在序列中找出一值的连续n次出现的位置
二、修改序列操作(27个)
1.copy()
从序列的第一个元素起进行复制
copy (v1.begin(),v1.end(),v2.begin());//v1复制给v2
2.copy_backward()
从序列的最后一个元素起进行复制
3.swap()
交换两个元素
swap(a,b);//交换ab
4.swap_ranges()
交换指定范围的元素
5.iter_swap()
交换由迭代器所指的两个元素
6.transform()
将某操作应用于指定范围的每个元素
transform(v1.begin(),v1.end(),v2.begin(),add);//将v1复制到v2同时先执行add方法 将其改变后放入v2容器中
7.replace()
用一个给定值替换一些值
replace(v1.begin(),v1.end(),old_value,new_value);//在v1中找old_value,并用new_value替换
8.replace_if()
替换满足谓词的一些元素
9.replace_copy()
复制序列时用一给定值替换元素
10.replace_copy_if()
复制序列时替换满足谓词的元素
11.fill()
用一给定值取代所有元素
fill(v1.begin(),v1.end(),value);//遍历v1,value替换所遍历的值
12.fill_n()
用一给定值取代前n个元素
13.generate()
用一操作的结果取代所有元素
14.generate_n()
用一操作的结果取代前n个元素
15.remove()
删除具有给定值的元素
remove(v1.begin(),v1.end(),value);//删除v1中所有值为value的数据
16.remove_if()
删除满足谓词的元素
17.remove_copy()
复制序列时删除具有给定值的元素
18.remove_copy_if()
复制序列时删除满足谓词的元素
19.unique()
删除相邻的重复元素
vector<int> ModuleArr;
sort(ModuleArr.begin(), ModuleArr.end());//排序
ModuleArr.erase(unique(ModuleArr.begin(), ModuleArr.end()), ModuleArr.end());//去重
20.unique_copy()
复制序列时删除相邻的重复元素
21.reverse()
反转元素的次序
reserve(v1.begin(),v1.end());//反转v1次序
22.reverse_copy()
复制序列时反转元素的次序
23.rotate()
循环移动元素
24.rotate_copy()
复制序列时循环移动元素
25.random_shuffle()
随机:采用均匀分布来随机移动元素
26.partition()
划分:将满足某谓词的元素都放到前面
27.stable_partition()
将满足某谓词的元素都放到前面并维持原顺序
三、序列排序及相关操作(27个)
1.sort()
以很好的平均效率排序
sort(v1.begin(), v1.end());//v1排序
2.stable_sort()
排序:并维持相同元素的原有顺序
3.partial_sort()
将序列的前一部分排好序
4.partial_sort_copy()
复制的同时将序列的前一部分排好序
5.nth_element()
第n个元素 将第n各元素放到它的正确位置
6.lower_bound()
找到大于等于某值的第一次出现
7.upper_bound()
找到大于某值的第一次出现
8.equal_range()
找到(在不破坏顺序的前提下)可插入给定值的最大范围
9.binary_search()
在有序序列中确定给定元素是否存在
10.merge()
归并两个有序序列
merge(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin());//合并v1和v2到v3
11.inplace_merge()
归并两个接续的有序序列
12.includes()
有序结构上的集合操作:一序列为另一序列的子序列时为真
13.set_union()
构造两个集合的有序并集
14.set_intersection()
构造两个集合的有序交集
15.set_difference()
构造两个集合的有序差集
16.set_symmetric_difference()
构造两个集合的有序对称差集(并-交)
17.push_heap()
向堆中加入元素
18.pop_heap()
从堆中弹出元素
19.make_heap()
从序列构造堆
20.sort_heap()
给堆排序
21.min()
两个值中较小的
min(a,b);
22.max()
两个值中较大的
max(a,b);
23.min_element()
序列中的最小元素
max_element(first,end,cmp);//第三个参数cmp可写可不写,max_element()和min_element() 默认是从小到大排列
24.max_element()
序列中的最大元素
min_element(first,end,cmp)
25.lexicographical_compare()
两个序列按字典序的第一个在前
26.next_permutation()
按字典序的下一个排列
27.prev_permutation()
按字典序的前一个排列
总结
本文总结了algorithm库中模板函数方法,并对常用函数方法进行详细使用介绍。