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()将每个元素和其之前的所有元素结合
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值