算法分类:
1、非更易型算法
2、更易型算法
3、移除型算法
4、变序型算法
5、排序算法
6、已排序区间算法
7、数值算法
一、非更易型算法
非更易型算法既不改动元素次序,也不改动元素值。它们通过迭代器将某种指定的操作作用于区间中的每一个元素身上。该操作通常用来处理区间内的每一个单独元素。
算法名称 | 含义 |
---|---|
for_each() | 对每个元素执行某种操作(操作不改变元素,比如遍历操作) |
count() | 返回元素个数 |
count_if() | 返回满足某种准则的元素个数 |
min_element() | 返回区间内的最小值元素 |
max_element() | 返回区间内的最大值元素 |
find() | 查找“与被传入值相等” 的第一个元素 |
find_if() | 查找“满足某个准则”的第一个元素 |
find_if_not() | 查找“不满足某个准则”的第一个元素 |
search_n() | 查找“具备某特性”的n个连续元素 |
search() | 查找某个子区间的第一次出现位置 |
find_end() | 查找某个子区间的最后一次出现位置 |
find_first_of() | 查找“数个可能元素中的第一个出现者” |
adjacent_find() | 查找连续两个相等(或满足某准则)的元素 |
equal() | 判断两区间是否相等 |
is_permutation() | 两个不定序区间是否内含相等元素 |
mismatch() | 返回两序列的各组对应元素中的第一对不相等元素 |
lexicographical_compare() | 判断在字典序下某序列是否小于另一序列 |
is_sorted() | 判断某序列是否已排序 |
is_sorted_until() | 返回区间内第一个不满足排序准则的元素 |
is_partitioned() | 返回“区间内的元素是否基于某准则被分割为两组” |
partition_point() | 返回区间内的一个分割点,它将区间分为两组,一组满足某准则,另一组不满足 |
is_heap() | 返回“是否区间内的元素形成一个heap” |
is_heap_until() | 返回“区间内第一个未遵循heap排序准则的元素” |
all_of() | 返回“是否所有元素都满足某准则” |
any_of() | 返回“是否至少有一个元素满足某准则” |
none_of() | 返回“是否无任何元素吻合某准则” |
none_of() | 返回“是否无任何元素吻合某准则” |
查找算法统计
查找 | string成员函数 | STL算法 |
---|---|---|
某元素第一次出现位置 | find() | find() |
某元素最后一次出现位置 | rfind() | find() ,搭配reverse iterator |
某子区间第一次出现位置 | find() | search() |
某子区间最后一次出现位置 | rfind() | find_end() |
某数个元素第一次出现位置 | find_first_of() | find_first_of() |
某数个元素最后一次出现位置 | find_last_of() | find_last_of(), 搭配reverse iterator |
n个连续元素第一次出现位置 | search_n() |
二、更易型算法
更易型算法,要不是直接改变元素值,就是在赋值元素到另一区间的过程中改变元素值。如果是第二种情况,原区间不会发生变化。
算法名称 | 含义 |
---|---|
for_each() | 针对某个区间执行某项操作(比如统一加上某个值) |
copy() | 从第一个元素开始,复制某个区间 |
copy_if() | 复制那些“符合某个给定准则”的元素 |
copy_n() | 复制n个元素 |
copy_backward() | 从最后一个元素开始,复制某个区间 |
move() | 从第一个元素开始,搬移某个区间 |
move_backward() | 从最后一个元素开始,搬移某个区间 |
transform() | 改动(并复制)元素,将两个区间的元素合并 |
merge() | 合并两个区间 |
swap_range() | 交换两区间的元素 |
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()类似,但保持“与准则相符”和“与准则不符“之各个元素之间的相对位置 |
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进行排序(排序完成后不再是一个heap了) |
以下是检验是否排序的算法
算法名称 | 含义 |
---|---|
is_sorted() | 检验区间内的元素是否都已排序 |
is_sorted_until() | 返回区间内第一个“破坏排序状态”的元素 |
is_partitioned() | 检验区间内的元素是否根据某个准则被分为两组 |
partition_point() | 返回区间内的分隔点,它把区间分割为“满足”和“不满足”某predicate的两组 |
is_heap() | 检验区间内的元素是否都排序成为一个heap |
is_heap_until() | 返回区间内第一个“破坏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() | 将每个元素和其之前的所有元素结合 |
参考《C++标准库》
谢谢阅读