为了处理容器内的元素,STL提供了一些标准算法,包括查找、排序、拷贝、重新排序、修改、数值运算等基本而普遍的算法。算法并非容器内的成员函数,而是一种搭配迭代器使用的全局函数。这么做有一个重要的优势,所有算法只需要实现一份,就可以对所有容器运作,不必为每一种容器量身定做。
1、非更易型算法
2、更易型算法
3、移除型算法
4、变序型算法
5、排序算法
6、已排序区间算法
7、数值算法
1、非更易型算法 非更易型算法既不改动元素的次序,也不改动元素值。
for_each() |
对每个元素执行某操作 |
count() |
返回元素的个数 |
count_if() |
返回满足某一准则(条件)的元素个数 |
min_element() |
返回最小元素值 |
max_element() |
返回最大元素值 |
minmax_element() |
返回最小值和最大值元素 |
find() |
查找“与被传入值相等”的第一个元素 |
find_if() |
查找“满足某个准则”的第一个元素 |
find_if_not() |
查找“不满足某个准则”的第一个元素 |
search_n() |
查找“具备某特性”之前的n个连续元素 |
search() |
查找某个子区间第一次出现位置 |
find_end() |
查找某个子区间最后一次出现位置 |
find_first_of() |
查找“数个可能元素的第一个出现者” |
adjacent_find() |
查找连续两个相等的元素 |
equal()
|
判断两区间是否相等 |
is_sorted() |
返回“是否区间内的元素已排序” |
is_heap() |
返回“是否区间内的元素形成一个heap” |
all_of() |
返回“是否所有元素都吻合某个规则” |
any_of() |
返回“是否至少一个元素吻合某个规则” |
none_of() |
返回“是否无任何元素吻合某个规则” |
2、更易型算法 更易型算法,要不是直接改动元素值,就是在复制元素到另一区间的过程中改变元素值。
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个元素 |
itoa() |
将所有元素以一系列的递增值取代 |
replace() |
将具有某个特定值的元素替换为另一个 |
replace_if() |
将符合某个准则的元素替换为另一个 |
replace_copy() |
复制整个区间,并将具有某个特定值的元素替换为另一个值 |
replace_copy_if() |
复制整个区间,并将符合某准则的元素替换为另一个值 |
3、移除型算法 移除型算法是一种特殊的更易型算法,它们可以移除区间内的元素,也可以在复制过程中执行移除动作。
remove() |
将“等于某特定值的元素”全部移除 |
remove_if() |
将“满足某准则”的元素全部移除 |
remove_copy() |
将“不等于某特定值”的元素全部复制到它处 |
remove_copy_if() |
将“不满足某准则”的元素全部复制到它处 |
unique() |
移除毗邻的重复元素(元素值相等者) |
unique_copy() |
移除毗邻的重复元素,并复制到它处 |
4、变序型算法 变序型算法是通过元素值的赋值和互换,改变元素顺序,但不改变元素值。
reverse() |
将元素次序逆转 |
reverse_copy() |
复制的同时,逆转元素顺序 |
rotate() |
旋转元素次序 |
rotate_copy() |
复制的同时,旋转元素次序 |
shuffle() |
打乱元素次序 |
random_shuffle() |
打乱元素次序 |
5、排序算法 排序算法是一种特殊的变序型算法,因为它们也改变元素的孙晔。
sort() |
对所有元素排序(采用快速排序) |
stable_sort() |
对所有元素进行稳定排序(采用归并排序) |
partial_sort() |
排序,直到前n个元素就位(采用堆排序) |
partial_sort_copy() |
排序,直到前n个元素就位(采用堆排序),将结果复制于它处 |
make_heap() |
将某区间转为一个heap |
push_heap() |
将元素加入一个heap |
pop_heap() |
从heap移除一个元素 |
sort_heap() |
对heap进行排序 |
6、已排序区间算法 已排序区间算法,指其所作用的区间在某种顺序准则下已排序。
binary_search() |
判断某区间内是否包含某个元素 |
includes() |
判断某区间的每个元素是否都涵盖与另一区间中 |
lower_bound() |
查找第一个“大于等于某给定值”的元素 |
upper_bound() |
查找第一个“大于某给定值”的元素 |
equal_range() |
返回“等于某给定值”的所有元素构成的区间 |
merge() |
将两个区间的元素合并 |
set_union() |
求两个区间的并集 |
set_intersection() |
求两个区间的交集 |
set_difference() |
求“位于第一区间”但“不位于第二区间”的所有元素,形成一个已排序区间 |
set_symmetric_difference() |
找出“只出现于两区间之一”的所有元素,形成一个已排序区间 |
inplace_merge() |
将两个连贯的已排序区间合并 |
partition_point() |
用一个判断式分割区间,返回分割元素 |
7、数值算法
【STL中常用的算法】数值算法以各种不同的方式结合数值元素。
accumulate() |
结合所有元素(求总和、求乘积) |
inner_product() |
结合两区间内的所有元素 |
adjacent_difference() |
将每个元素和其前一元素结合 |
partial_sum() |
将每个元素和其之前的所有元素结合 |
推荐阅读