STL库算法概览

1、 查找对象的算法
  • 下面的STL算法都在头文件algorithm中,命名空间为std。
  • 简单查找算法
find(beg, end, val)
find_if(beg, end, unaryPred)
find_if_not(beg, end, unaryPred)
count(beg, end, val)
count_if(beg, end, val)
  • 查找重复值算法
adjacent_find(beg, end)
adjacent_find(beg, end, binaryPred)
search_n(beg, end, count, val)
search_n(beg, end, count, val, binaryPred)
  • 查找子序列的算法
search(beg1, end1, beg2, end2)
search(beg1, end1, beg2, end2, binaryPred)
find_first_of(beg1, end1, beg2, end2)
find_first_of(beg1, end1, beg2, end2, binaryPred)
find_end(beg1, end1, beg2, end2)
find_end(beg1, end1, beg2, end2, binaryPred)
  • 其他只读算法
foreach(beg, end, unaryOp)
mismatch(beg1, end1, beg2)
mismatch(beg1, end1, beg2, binaryPred)
equal(beg1, end1, beg2)
equal(beg1, end1, beg2, binaryPred)
2、 二分搜索算法
  • 本算法要求序列中的元素已经是有序的
lower_bound(beg, end, val)
lower_bound(beg, end, val, comp)
upper_bound(beg, end, val)
upper_bound(beg, end, val, comp)
equal_bound(beg, end, val)
equal_bound(beg, end, val, comp)
binary_bound(beg, end, val)
binary_bound(beg, end, val, comp)
3、 写容器元素的算法
  • 只写不读元素的算法
fill(beg, end, val)
fill_n(dest, cnt, val)
generate(beg, end, Gen)
generate_n(dest, cnt, Gen)
  • 使用输入迭代器的写算法
copy(beg, end, dest)
copy_if(beg, end, dest, unaryPred)
copy_n(beg, n, dest)
move(beg, end, dest)
transform(beg, end, dest, unaryOp)
transform(beg, end, beg2, dest, binaryOp)
replace_copy(beg, end, dest, old_val, new_val)
replace_copy_if(beg, end, dest, unaryPred, new_val)
merge(beg1, end1, beg2, end2, dest)
merge(beg1, end1, beg2, end2, dest, comp)
  • 使用前向迭代器的写算法
iter_swap(iter1, iter2)
swap_ranges(beg1, end1, beg2)
replace(beg, end, old_val, new_val)
replace_if(beg, end, unaryPred, new_val)
  • 使用双向迭代器的写算法
copy_backward(beg, end, dest)
move_backward(beg, end, dest)
inplace_merge(beg, mid, end)
inplace_merge(beg, mid, end, comp)
4、 划分算法
  • 每个划分和排序算法都提供稳定和不稳定版本,稳定算法保证保持相等元素的相对顺序。由于稳定算法会做更多工作,可能比不稳定版本慢得多并消耗更多内存。
stable_partition(beg, end, unaryPred)
partition(beg, end, unaryPred)
is_partitioned(beg, end, unaryPred)
partition_copy(beg, end, dest1, dest2, unaryPred)
partition_point(beg, end, unaryPred)
5、 排序算法
sort(beg, end)
stable_sort(beg, end)
sort(beg, end, comp)
stable_sort(beg, end, comp)
is_sorted(beg, end)
is_sorted(beg, end, comp)
is_sorted_until(beg, end)
is_sorted_until(beg, end, comp)
partial_sort(beg, mid, end)
partial_sort(beg, mid, end, comp)
partial_sort_copy(beg, end, destBeg, destEnd)
partial_sort_copy(beg, end, destBeg, destEnd, comp)
nth_element(beg, nth, end)
nth_element(beg, nth, end, comp)
6、 通用重排操作
  • 这些算法基本都进行原址操作,即在输入序列自身内部重排元素,_copy版本完成相同的重排工作,但将重排后的元素写入到一个指定的目的序列中,而不是改变输入序列。
  • 使用前向迭代器的重排算法
remove(beg, end, val)
remove_if(beg, end, unaryPred)
remove_copy(beg, end, dest, val)
remove_copy_if(beg, end, dest, unaryPred)
unique(beg, end)
unique(beg, end, binaryPred)
unique_copy(beg, end, dest)
unique_copy_if(beg, end, dest, binaryPred)
rotate(beg, mid, end)
rotate_copy(beg, mid, end, dest)
  • 使用双向迭代器的重排算法
reverse(beg, end)
reverse_copy(beg, end, dest)
  • 使用随机访问迭代器的重排算法
random_shuffle(beg, end)
random_shuffle(beg, end, rand)		//rand为可调用对象
shuffle(beg, end, Uniform_rand)		//满足均匀分布随机数生成器的要求
7、 排列算法
  • 排列算法生成序列的字典序排列,这些算法通过重排它的一个排列来生成字典序中下一个或前一个排列。这些算法假定序列中的元素都是唯一的,即没有两个元素值是一样的。
is_permutation(beg1, end1, beg2)
is_permutation(beg1, end1, beg2, binaryPred)
next_permutation(beg, end)
next_permutation(beg, end, comp)
prev_permutation(beg, end)
prev_permutation(beg, end, comp)
8、有序序列的集合算法
  • 这些算法提供了普通顺序容器或其他序列上的类集合行为
includes(beg, end, beg2, end2)
includes(beg, end, beg2, end2, comp)
set_union(beg, end, beg2, end2, dest)
set_union(beg, end, beg2, end2, dest, comp)
set_intersection(beg, end, beg2, end2, dest)
set_intersection(beg, end, beg2, end2, dest, comp)
set_difference(beg, end, beg2, end2, dest)
set_difference(beg, end, beg2, end2, dest, comp)
set_symmetric_difference(beg, end, beg2, end2, dest)
set_symmetric_difference(beg, end, beg2, end2, dest, comp)
9、最小值和最大值
min(val1, val2)
min(val1, val2, comp)
min(init_list)
min(init_list, comp)
max(val1, val2)
max(val1, val2, comp)
max(init_list)
max(init_list, comp)
minmax(val1, val2)	
minmax(val1, val2, comp)
minmax(init_list)
minmax(init_list, comp)

min_element(beg, end)
min_element(beg, end, comp)
max_element(beg, end)
max_element(beg, end, comp)
minmax_element(beg, end)
minmax_element(beg, end, comp)

//字典序比较
lexicographical_compare(beg1, end1, beg2, end2)
lexicographical_compare(beg1, end1, beg2, end2, comp)
10、数值算法
  • 数值算法定义在头文件numeric中。
accumulate(beg, end, init)
accumulate(beg, end, init, binaryOp)
inner_product(beg1, end1, beg2, init)
inner_product(beg1, end1, beg2, init, binOp1, binOp2)
partial_sum(beg, end, dest)
partial_sum(beg, end, dest, binaryOp)
adjacent_difference(beg, end, dest)
adjacent_difference(beg, end, dest, binaryOp)
iota(beg, end, val)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值