1、不能使用泛型算法的情况及解决方法
1.1 、不允许使用的情况
关联容器如map 或set ,在内部维护元素的排序关系以便允许快速查伐和获取,因此不允许在关联容器上应用重新排序的泛型算法如sort()或partition() 。如果要重新排序关联容器中的元素我们必须先把它拷贝到顺序容器中如vector 或list 。
list容器是一个双向链表除了实际的数据每个元素维持着两个分别指向下一个和上一个链表元素的链成员。list 的主要优势在于我们可以有效地把一个元素或一段元素插入到list 的任意位置上,或者从中删除主要缺点是没有随机元素访问特性。
1.2、list容器专门的成员函数
list 容器不支持随机访问所以merge()、 remove()、 reverse()、 sort()和unique()泛型算法最好不要用在list 对象上尽管这些算法都没有显式地要求一个RandomAccessIterator 标准库为每个算法都提供了专门的list 成员实例(比如专门为list 的splice()操作):
list::merge() 用第二个有序的list 合并一个有序list
list::remove() 删除等于某个值的元素
list::remove_if() 删除满足某个条件的元素
list::reverse() 将list 中元素反向排列
list::sort() 排序list 的元素
list::splice() 把一个list 的元素移到另一个list 中
list::unique() 删除某个元素的重复连续拷贝
2、函数分类
2.1、查找算法
13个查找算法为判断容器中是否存在一个值提供了各种策略。
adjacent_find(),
binary_search(),
count(),
count_if(),
equal_range(),
find(),
find_end(),
find_first_of(),
find_if(),
lower_bound(),
upper_bound(),
search(), search_n()
2.2、排序和通用整序算法
4个排序sorting 和通用整序ordering 算法为容器中元素的排序提供了各种策略。
注意排序算法不能被用在list 或联合容器上如set或map。
inplace_merge(),
merge(),
nth_element(),
partial_sort(),
partial_sort_copy(),
partition(),
random_shuffle(),
reverse(),
reverse_copy(),
rotate(),
rotate_copy(),
sort(),
stable_sort(),
stable_partition()
2.3、删除和替换算法
15个删除和替换算法为替换或去掉一个或一组元素提供了各种策略。
copy(),
copy_backwards(),
iter_swap(),
remove(),
remove_copy(),
remove_if(),
remove_copy_if(),
replace(),
replace_copy(),
replace_if(),
replace_copy_if(),
swap(),
swap_range(),
unique(),
unique_copy()
2.4、排列组合算法
next_permutation(),
prev_permutation()
2.5、算术算法
4 个算法提供对于容器的算术操作,为了使用它们必须包含头文件
accumulate(),
partial_sum(),
inner_product(),
adjacent_difference()
2.6、生成和异变算法
6 个生成和异变算法用一组值填充一个新序列或替换现有的序列 。
fill(),
fill_n(),
for_each(),
generate(),
generate_n(),
transform()
2.7、关系算法
7 个关系算法为比较两个容器提供了各种策略。
equal(),
includes(),
lexicographical_compare(),
max(),
max_element(),
min(),
min_element(),
mismatch()
2.8、集合算法
4 个集合(set )算法提供了对于任何容器类型的通用集合操作。
set_union(),
set_intersection(),
set_difference(),
set_symmetric_difference()
2.9、堆算法
堆是以“数组来表示二叉树”的一种形式,标准库提供了最大堆(max-heap) 表示,它里面每个节点的键值大于等于其子节点的键值。
make_heap(),
pop_heap(),
push_heap(),
sort_heap()