- STL Algorithm 中的函数前两个入参一般都是迭代器,表示
[begin, end)
中的一段数据
函数名 |
作用 |
accumulate |
将一段数据累加起来(可自定义二元运算) |
adjacent_difference |
将一段数据相邻元素作差,结果存放到另一段(可自定义二元运算) |
inner_product |
两段数据作内积(可自定义二元运算) |
partial_sum |
将一段数据的前 n 项和存放到另一段(可自定义二元运算) |
iota (C++ 11) |
从某个值开始,递增地填充一段区域,如 x, x+1, x+2… |
Non-modifying
函数名 |
作用 |
all_of / any_of / none_of |
判断一段数据是否全部满足 / 部分满足 / 全部不满足某一条件 |
for_each |
将一段数据中的每一个都作为入参调用一遍函数 |
find / find_if / find_if_not |
找一段数据中第一个等于某值 / 满足某条件 / 不满足某条件的元素 |
find_end |
找一段数据中满足某条件(例如和另一段数据相等)的最后一个子串 |
find_first_of |
找一段数据中满足某条件(例如出现在另一段数据中)的第一个元素 |
adjacent_find |
找一段数据中第一对满足某条件的相邻元素 |
count / count_if |
数一段数据中某元素 / 满足某条件的元素出现的次数 |
mismatch |
找两段数据中第一对不匹配的元素(例如不相等或自定义函数返回 false) |
equal |
判断两段数据中是否每个元素一一匹配(匹配的含义同上) |
is_permutation |
判断一段数据是否为另一段数据的排列 |
search / search_n |
找一段数据中满足某条件(例如和另一段数据相等)的第一个子串 |
Modifying
函数名 |
作用 |
copy / copy_n / copy_if / copy_backward |
将一段数据(前 n 个 / 满足条件的元素 / 后向)拷贝到另一段 |
move / move_backward |
将一段数据(前向 / 后向)移动到另一段 |
swap(C++ 11 后在 <utility> 头文件中) |
交换两个容器的元素 |
swap_ranges |
交换两段数据 |
iter_swap |
交换两个迭代器所指的元素 |
transform |
将一段(或两段)数据经过某函数作用后存放于另一段 |
replace / replace_if |
将一段数据中某元素(或满足条件的元素)替换为新值 |
replace_copy / replace_copy_if |
同上,但不是就地修改,而是在拷贝出来的数据上修改 |
fill / fill_n |
以某值填充一段数据(的前 n 个) |
generate / generate_n |
以某函数的返回值填充一段数据(的前 n 个) |
remove / remove_if |
将一段数据中某元素(或满足条件的元素)删去 |
remove_copy / remove_copy_if |
同上,但不是就地删除,而是在拷贝出来的数据上删除 |
unique / unique_copy |
将一段数据中连续重复(或满足某条件)的元素变成一个 |
reverse / reverse_copy |
翻转一段数据中的元素 |
rotate / rotate_copy |
将一段数据的后面一部分放到前面一部分的前面 |
random_shuffle / shuffle |
将一段数据顺序打乱 |
Partitions
函数名 |
作用 |
is_partitioned |
判断一段数据中是否满足某条件的元素全部位于不满足的元素之前 |
partition |
划分一段数据,将满足某条件的元素全部置于不满足的元素之前 |
stable_partition |
稳定划分,不会改变两部分数据内部的有序性 |
partition_copy |
稳定划分,将划分后的数据放在两个不同的地方 |
partition_point |
传入一段已划分好的数据,输出两部分的分界点 |
Sorting
函数名 |
作用 |
sort |
排序一段数据 |
stable_sort |
稳定排序一段数据 |
partial_sort |
部分排序一段数据(例如 n 个元素中的前 k 个是最小且升序的) |
partial_sort_copy |
将一段数据排好序后前 k 个拷贝到另一段(不真的对 n 个元素都排序) |
is_sorted |
检查一段数据是否有序 |
is_sorted_until |
找一段数据中第一个破坏有序性的元素 |
nth_element |
重排一段数据,使得某个位置左边的元素都比他小,右边的元素都比他大 |
Binary search
mostly operating on sorted ranges
函数名 |
作用 |
lower_bound / upper_bound |
找到一段有序数据中某个元素最早(最晚)出现的位置(后一位) |
equal_range |
找到一段有序数据中某个元素出现的范围 |
binary_search |
判断一段有序数据中是否存在等于(大于 / 小于)某值的元素 |
Merge
operating on sorted ranges
函数名 |
作用 |
merge / inplace_merge |
(就地)归并 |
includes |
判断一段数据是否完全包含另一段数据 |
set_union |
求并集 |
set_intersection |
求交集 |
set_difference |
求差集 |
set_symmetric_difference |
求对称差 |
Heap
函数名 |
作用 |
push_heap |
向堆中加入一个元素 |
pop_heap |
从堆顶弹出一个元素 |
make_heap |
建堆 |
sort_heap |
将一个堆重排成有序数组 |
is_heap |
判断一段数据是否构成一个堆 |
is_heap_until |
找一段数据中第一个破坏堆性质的元素 |
Min / Max
函数名 |
作用 |
min / max / minmax |
取小 / 取大 / 两个都取,返回 pair |
min_element / max_element / minmax_element |
从一段数据中取 |
Other
函数名 |
作用 |
lexicographical_compare |
按字典序比较两段数据 |
next_permutation / prev_permutation |
找(按字典序的)后一个 / 前一个排列 |