STL(二)—算法
算法库定义了用来实现各种功能的函数(如查找、排序、计数、修改等),都是针对指定范围内元素的操作。需要注意的是,元素的范围以 [first, last) 的形式指定,其中 last 指的是范围内最后一个元素的下一个元素。在头文件 algorithm中定义。
非变动性算法
for_each() //对每个元素执行某个操作
count() //返回某元素的数量
count_if() //返回满足特定条件的元素的数量
min_element() //返回最小值
max_element() //返回最大值
minmax_element() //返回最大值和最小值
find() //搜寻等于某值的第一个元素
find_if() //查找满足特定条件的第一个元素
find_if() //查找不满足特定条件的第一个元素
search() //查找某区间第一次出现位置
search_n() //查找满足条件的第一段“n个连续元素”
find_end() //查找一定范围内最后一次出现位置
find_first_of() //查找等于某个值的第一个元素
adjacent_find() //查找彼此相邻的两个相同(或其它的关系)的元素
equal() //确定两区间是否相同
is_permutation() //返回两个无序范围内是否包含相同元素
mismatch() //查找两个序列中,第一个不同元素的位置
lexicographical_compare() //返回字典序更小的范围
is_sorted() //返回范围内的元素是否排序
is_sorted_until() //返回范围内第一个无序元素
is_partitioned() //返回范围内的元素在某准则下是否被划分为两个部分
partition_point() //返回范围内区可进行边间划分的元素
is_heap() //返回范围内的元素是否是堆排序
is_heap_until() //返回范围内第一个非堆排序的元素
all_of() //范围内是否所有元素都满足某条件
any_of() //范围内是否存在某元素满足某条件
none_of() //范围内是否没有元素满足某条件
变动性算法
for_each() //对每个元素执行某个操作
copy() //从第一个元素开始,复制某个范围
copy_if() //根据某个准则复制元素
copy_n() //复制n个元素
copy_backward() //从最后一个元素开始,从后往前复制某个范围
move() //将某一范围的元素移动到一个新的位置
move_backward() //按从后往前的顺序移动某一范围的元素到新的位置
transform() //合并两个范围内的元素并进行修改
merge() //合并两个范围元素
swap_ranges() //交换两个范围的元素
fill() //将一个值赋给每个元素
fill_n() //将一个值赋给n个的元素
generate() //将函数的结果赋给每个元素
generate_n() //将函数的结果赋给n个元素
iota() //将升序序列的值赋给每个元素
replace() //用一个值替换另一个值
replace_if() //将所有满足特定条件的元素替换为另一个值
replace_copy() //复制一个范围内的元素,并用一个值替换为另一个值
replace_copy_if() //复制一个范围内的元素,并将满足特定条件的元素替换为另一个值
删除算法
remove() //删除拥有特定值的元素
remove_if() //删除满足特定条件的元素
remove_copy() //复制不匹配特定值的元素
remove_copy_if() //复制不满足特定条件的元素
unique() //删除区间内连续重复的元素
unique_copy() //删除区间内连续重复的元素并复制
变序算法
reverse() //逆序排列所有元素
reverse_copy() //复制所有元素并逆序
rotate() //旋转元素顺序
rotate_copy() //复制所有元素并旋转
next_permutation() //置换元素顺序
prev_permutation() //置换元素顺序
shuffle() //使元素变为随机顺序
random_shuffle() //使元素变为随机顺序
partition() //把一个区间的元素分为两组,前面的一组满足某个条件
stable_partition() //将元素分为两组,同时保留其相对顺序
partition_copy() //将区间内的元素分为两组复制到不同位置
排序算法
sort() //所有元素排序
stable_sort() //排序同时保留相对位置
partial_sort() //排序,直到前n个元素就位
partial_sort_copy() //排序,直到前n个元素就位,复制这个结果
nth_element() //根据第n个位置进行排序
partition() //改变元素次序,是符合某准则的元素放在前面
stable_partition() //partition()相同,但保持相对位置
partition_copy() //改变元素次序,是符合某准则的元素放在前面,并复制
make_heap() //将一个区间转换为一个heap
push_heap() //将元素加入到一个heap
pop_heap() //从heap中删除一个元素
sort_heap() //对heap进行排序
已序区间算法
binary_search() //判断区间内是否包含某个元素
includes() //判断区间内每个元素是否都涵盖于另一个区间中
lower_bound() //搜寻第一个“大于等于给定值”的元素
upper_bound() //搜寻第一个“大于给定值”的元素
equal_range() //返回“等于给定值”的元素区间
merge() //合并两个区间的元素
set_union() //求两个区间的并集
set_intersection() //求两个区间的交集
set_difference() //求位于第一个区间不位于第二个区间的所有元素,形成一个已序区间
set_symmetric_difference() //找出只出现于两区间之一的所有元素,形成一个已序区间
inplace_merge() //将两个连续的已序区间合并
partition_point() //返回区间划分边界元素
数值算法
accumulate() //组合所有元素(求和、求积等)
inner_product() //组合两区间内所有元素
adjacent_difference() //将每个元素和其前一元素组合
partial_sum() //将每个元素和其先前的所以元素组合