1 泛型算法
所有泛型算法的前两个实参都是一对iterator, 通常被称为first 和 last, 他们标记出要操作的容器或内置数组中的元素范围。
[first, last)
表示从first开始,到last结束,但不包括last。当first==last时范围为空。
1.1 排序和通用整序算法
14个排序和通用整序算法为容器中元素的排序提供了各种策略。分割算法把容器分为两组。第一组由满足某个条件的元素组成,第二组则由不满足条件的元素组成。
inplace_merge(), merge(), nth_element(), partial_sort(), partial_sort_copy(), partition(), random_shuffle(), reverse(), reverse_copy(), rotate(), rotate_copy(), sort(), stable_sort(), stable_partition()
1.2 list
(1)list::merge()
根据底层元素类型的小于操作符或用户指定的比较操作,合并两个已排序的list的元素。
在应用merge()操作以后,list2是空的,list1含有升序排列的15个元素
(2)list::remove()
(3) list::remove_if()
remove_if()操作删除所有满足指定条件为真的元素。例如:
(4) list::reverse()
reverse()操作反向排列list元素
(5)list::sort()
缺省情况下,sort()操作以底层元素类型的小于操作符以升序放置list元素。也可以将一个替换的比较操作符指定为实参。例如:
2 函数对象
函数指针的一种替代策略是Function object(函数对象)。
函数对象与函数指针相比较有两个方面的优点:首先如果被重载的调用操作符是inline函数则编译器能够执行内联编译,提供可能的性能好处;其次函数对象可以拥有任意数目的额外数据,用这些数据可以缓冲结果,也可以缓冲有助于当前操作的数据。
函数对象是一个类,它重载了函数调用操作符operator() ,该操作符封装了一个函数的功能。典型情况下函数对象被作为实参传递给泛型算法,当然我们也可以定义独立的函数对象实例。