STL算法接口

算法分类:

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++标准库》

谢谢阅读

猜你喜欢

转载自blog.csdn.net/weixin_43869898/article/details/114163757