C++ STL 算法介绍
STL 标准模板库 <algorithm>
定义了一组基于算法的函数。这些算法函数可以通过迭代器或指针访问的任何对象序列,例如数组或某些 STL 容器 的实例。但是请注意,算法通过迭代器直接对值进行操作,不会影响容器的结构(它永远不会影响容器的大小或存储分配)。
下面我们直接看一下这些函数的功能介绍。 👀 (注:带 🐙 表示 function template)
不修改序列操作
Non-modifying sequence operations
函数 | 说明 |
---|---|
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 | 该函数按顺序返回第一个不匹配的值。 |
equal | 该函数用于检查两个参数是否所有元素都相等。 |
is_permutation | 该函数检查参考参数是否为其他参数的排列。 |
search | 该函数在一个参数内搜索子序列。 |
search_n | 该函数在参数内搜索元素的出现。 |
修改序列操作
Modifying sequence operations
函数 | 说明 |
---|---|
copy | 该函数复制元素的参数。 |
copy_n | 该函数复制参数内的n个元素 |
copy_if | 如果满足特定条件,该函数将复制参数的元素。 |
copy_backward | 函数以向后的顺序复制元素 |
move | 该函数移动元素的参数。 |
move_backward | 该函数将元素参数向后移动 |
swap | 该函数交换两个对象的值。 |
swap_ranges | 该函数交换两个参数的值。 |
iter_swap | 该函数交换参考下两个迭代器的值。 |
transform | 该函数转换一个参数内的所有值。 |
replace | 该函数将参数内的值替换为特定值。 |
replace_if | 如果满足特定条件,该函数将替换参数的值。 |
replace_copy | 该函数通过替换元素来复制值的参数。 |
replace_copy_if | 如果满足特定条件,该函数将通过替换元素来复制值的参数。 |
fill | 该函数用一个值填充参数内的值。 |
fill_n | 该函数填充序列中的值。 |
generate | 该函数用于生成参数值。 |
generate_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 | 该函数对参数的元素进行部分排序。 |
partial_sort_copy | 该函数对参数进行排序后将其复制。 |
is_sorted | 该函数检查参数是否已排序。 |
is_sorted_until | 函数检查直到参数排序的元素。 |
nth_element | 函数对参数内的元素进行排序。 |
二分搜索
Binary search (operating on partitioned/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
函数 | 说明 |
---|---|
max | 返回参数的最大元素。 |
min | 返回参数的最小元素。 |
minmax | 返回参数的最小和最大元素。 |
min_element | 返回参数的最小元素。 |
max_element | 返回参数的最大元素。 |
minmax_element | 返回参数的最小和最大元素。 |
其他
Other
函数 | 说明 |
---|---|
lexicographical_compare | 字典序小于比较。 |
next_permutation | 将范围转换为下一个排列。 |
prev_permutation | 将范围转换为先前的排列。 |