C++泛型算法

来源:互联网 发布:mac暴风影音调整字幕 编辑:程序博客网 时间:2024/05/21 22:38

1、泛型算法定义

泛型算法:因为它们实现共同的操作,所以称之为“算法”;而“泛型”指的是它们可以操作在多种容器类型上——不但可作用于 vector 或 list 这些标准库类型,还可用在内置数组类型、甚至其他类型的序列上,这些我们将在本章的后续内容中了解。自定义的容器类型只要与标准库兼容,同样可以使用这些泛型算法。

泛型算法本身从不执行容器操作,只是单独依赖迭代器和迭代器操作实现。算法基于迭代器及其操作实现,而并非基于容器操作。这个事实也许比较意外,但本质上暗示了:使用“普通”的迭代器时,算法从不修改基础容器的大小。正如我们所看到的,算法也许会改变存储在容器中的元素的值,也许会在容器内移动元素,但是,算法从不直接添加或删除元素。

除了少数例外情况,所有算法都在一段范围内的元素上操作,我们将这段范围称为“输出范围(input range)”。带有输入范围参数的算法总是使用头两个形参标记该范围。这两个形参是分别指向要处理的第一个元素和最后一个元素的下一位置的迭代器。

算法不直接修改容器的大小。如果需要添加或删除元素,则必须使用容器操作。

2、算法函数命名规范:

​(1)、带有谓词函数形参的算法,其名字带有后缀 _if,区别带有一个值或一个谓词函数参数的算法版本

(2)、_copy 后缀区别是否实现复制的算法版本

3、容器特有的算法

(1)list 

list 容器上的迭代器是双向的,而不是随机访问类型。由于 list 容器不支持随机访问,因此,在此容器上不能使用需要随机访问迭代器的算法。这些算法包括 sort 及其相关的算法。




对于 list 对象,应该优先使用 list 容器特有的成员版本,而不是泛型算法。

0 0
原创粉丝点击