c++primer第十章泛型算法小结-10

来源:互联网 发布:2001年全明星赛数据 编辑:程序博客网 时间:2024/06/06 17:50

第十章--泛型算法

1、泛型算法简介

插入,流,反向,移动迭代器,四种标准迭代器。

1, 标准库没有为每种容器类型都定义是吸纳某些特定操作的成员函数,而是定义了一组泛型算法;自定义的容器类型只要与标准库兼容,也可以使用这些算法。
2,每个泛型算法的实现独立于容器,且不依赖于容器存储的元素类型;
3,算法往往需要通过两个迭代器遍历一段元素来实现其功能;迭代器支持自增操作符,相等和不等操作符;第二个迭代器为超出末端迭代器,第一个迭代器必须能够通过自增到达第二个迭代器;
4,泛型算法本身不执行容器操作: 基于迭代器及其操作实现,不急于容器的操作;即算法从不修改基础容器的大小,即可能会改变存储在容器中的值,可能会移动元素,但是不会直接添加或者删除元素。 如果需要实现更多的操作,可以使用插入器(也是一种迭代器),但是算法本身不这么做;
5,泛型算法需包含<algorithm>头文件,泛化的算术算法必须包含<numeric>头文件。

2、泛型算法分类为:
修改容器的算法,即变化序列算法(mutating-sequence algorithm),如copy()、remove()、replace()、swap()等;
不修改容器的算法,即非变化序列算法(non-mutating-sequence algorithm),如count()、find()等;以及数字型算法。

3、泛型算法函数名后缀:
_if 表示函数采用的操作是在元素上,而不是对元素的值本身进行操作。如“find_if”算法表示查找一些值满足函数指定条件的元素;而“find”算法则查找特定的值。
_copy表示算法不仅操作元素的值,而且还把修改的值复制到一个目标范围中。例如"reverser"算法颠倒范围中元素的排列顺序,而"reverse_copy"算法同时把结果复制到目标范围中。
其它的后缀从英文意思上立即可以认出其意义。

4、泛型算法的构造与使用方法:
所有泛型算法的前两个实参是一对iterator,通常称为first和last,它们标出要操作的容器或内置数组中的元素范围。元素的范围,包括first,但不包含last的左闭合区间。即:[first,last),当first==last成立,则范围为空。

对iterator的属性,则要求在每个算法声明中指出,所声明的是最低要求。如find()算法的最低要求为:InputIterator;还可以传递更高级别的迭代子。如:ForwardIterator、BidirectonalIterator及RandomAccessInterator。但不能用OutputInterator。


5、泛型算法分类:
查找算法:有13种查找算法用各种策略去判断容器中是否存在一个指定值。equal_range()、lower_bound()和upper_bound()提供对半查找形式。

排序和通用整序算法:共有14种排序(sorting)和通用整序(ordering)算法,为容器中元素的排序提供各种处理方法。所谓整序,是按一定规律分类,如分割(partition)算法把容器分为两组,一组由满足某条件的元素组成,另一组由不满足某条件的元素组成。

删除和代替算法:有15种删除和代替算法。

排列组合算法:有2种算法。
排列组合是指全排列。如:三个字符{a,b,c}组成的序列有6种可能的全排列:abc,acb,bac,bca,cab,cba;并且六种全排列按以上顺序排列,认为abc最小,cba最大,因为abc是全顺序(从小到大)而cba是全逆序(从大到小)。

生成和改变算法:有6种,包含生成(generate),填充(fill)等等。

关系算法:有7种关系算法,为比较两个容器提供了各种策略,包括相等(equal()),最大(max()),最小(min())等等。

集合算法:4种集合(set)算法提供了对任何容器类型的通用集合操作。包括并(union),交(intersection),差(difference)和对称差(symmetric difference)。

堆算法:有4种堆算法。堆是以数组来表示二叉树的一种形式。标准库提供大根堆(max_heap),它的每个结点的关键字大于其子结点的关键字。

算术算法:该类算法有4种,使用时要求包含头文件<numeric>。

至于这一章重要的一个内容,迭代器,因为之前有了相应的的博文,所以在这不在重复。

0 0
原创粉丝点击