C++标准库有100多个算法,重在理解它们的结构(形参模式)
它们都含有一组形参规范。理解这些形参规范有利于学习新的算法--只要知道形参的含义。大多数算法采用下面四种形式之一:
alg(beg, end, other parms);
alg(beg, end, dest, other parms);
alg(beg, end, beg2, other parms);
alg(beg, end, beg2, end2, other parms);
其中,alg 是算法的名字,beg和end指定算法操作的元素范围。我们通常将该范围称为算法的“输入范围”。dest、beg2和end2是迭代器。
算法简介:
( 1)查找对象的算法:
find(beg,end,val)
count(beg,end,val)
find_if(beg,end,unaryPred)
count_if(beg,end,unaryPred)
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)
adjacent_find(beg,end)
adjacent_find(beg,end,binaryPred)
search(beg1,end1,beg2,end2)
search(beg1,end1,beg2,end2,binaryPred)
search_n(beg,end,count,val)
search_n(beg,end,count,val,binaryPred)
( 2)其他只读算法:
for_each(beg,end,f)
mismatch(beg1,end1,beg2)
mismatch(beg1,end1,beg2,binaryPred)
equal(beg1,end1,beg2)
equal(beg1,end1,beg2,binaryPred)
( 3)二分查找算法:
lower_bound(beg,end,val)
lower_bound(beg,end,val,comp)
upper_bound(beg,end,val)
upper_bound(beg,end,val,comp)
equal_range(beg,end,val)
equal_range(beg,end,val,comp)
binary_search(beg,end,val)
binary_search(beg,end,val,comp)
( 4)写容器元素的算法:
fill_n(dest,cnt,val)
generate_n(dest,cnt,Gen)
copy(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,and,dest,unaryPred,new_val)
merge(beg1,end1,beg2,end2,dest)
merge(beg1,end1,beg2,end2,dest,comp)
swap(elem1,elem2)
iter_swap(iter1,iter2)
swap_ranges(beg1,end1,beg2)
fill(beg,end,val)
generate(beg,end,Gen)
replace(beg,end,old_val,new_val)
replace_if(beg,end,unaryPred,new_val)
copy_backward(beg,end,dest)
inplace_merge(beg,mid,end)
inplace_merge(beg,mid,end,comp)
( 5)划分与排序算法:
stable_partition(beg,end,unaryPred)
partition(beg,end,unaryPred)
sort(beg,end)
stable_sort(beg,end)
sort(beg,end,comp)
stable_sort(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)通用重新排序算法:
remove(beg,end,val)
remove_if(beg,end,unaryPred)
unique(beg,end)
unique(beg,end,binaryPred)
rotate(beg,mid,end)
reverse(beg,end)
reverse_copy(beg,end,dest)
remove_copy(beg,end,dest,val)
remove_copy_if(beg,end,dest,unaryPred)
unique_copy(beg,end,dest)
unique_copy(beg,end,dest,binaryPred)
rotate_copy(beg,mid,end,dest)
random_shuffle(beg,end)
random_shuffle(beg,end,rand)
( 7)排列算法:
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)
(8)最大值和最小值算法:
min(va1,va2)
min(val1,val2,comp)
max(val1,val2)
max(val1,val2,comp)
min_element(beg,end)
min_element(beg,end,comp)
max_element(beg,end)
max_element(beg,end,comp)
lexicographical_compare(beg1,end1,beg2,end2)
lexicographical_compare(beg1,end1,beg2,end2,comp)
( 10)算术算法:
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)