STL中常用的算法

为了处理容器内的元素,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、数值算法

    数值算法以各种不同的方式结合数值元素。

accumulate() 结合所有元素(求总和、求乘积)
inner_product() 结合两区间内的所有元素
adjacent_difference() 将每个元素和其前一元素结合
partial_sum() 将每个元素和其之前的所有元素结合

你可能感兴趣的:(面试)