C++沉思录__算法__迭代器__数据结构

书中弟18章总结中有这么一段话:

所谓的泛型算法,就是这样的算法,对于所操作的数据结构的细节信息,只加入最低限度的理解。当然,这是理想情况,实际上是做不到的,作为这样一种折中。STL根据数据结构能够支持的有效操作,将这些数据结构进行分类。然后,对于每一个算法,指出这个算法所需要的数据结构的类别。

被分类的不是算法,也不是数据结构,而是用来访问数据结构的类型 也就是迭代器,也就是 输入 ,输出、前向迭代器 双向迭代器、以及随机存起迭代器。概念继承将这些种类关联起来,之所以称之为概念的,是因为这些种类本身都是概念,而不是类型或者对象

这一整套结构,使我们很同意判断出什么算法,应该作用于什么样的数据结构之上,另外,该结构提供了一种框架,其他人可以根据这种框架来补充程序库之外的新算法。

这段话可以是这么理解的,实际上,算法是对数据结构进行操作,算法,往往作用于特点的数据结构之上,这限制了算法的作用,对于不同的算法,可能其数据结构是类似的。为了将数据结构和算法分开,就产生了这样一个桥梁,也就是迭代器。迭代器支持不同类型的数据结构,算法需要特定的数据结构,那么算法就可以通过迭代器操作数据结构了。就是只要数据结构支持特定的操作,这些操作又可以由迭代器来完成,那么我们就可以用某种算法。这样实现了算法和数据结构的分离。说白了,数据结构支持特定操作,这些特定操作交给特定迭代器完成,算法通过这些迭代器就可以对数据结构进行操作了。

标准库中各种各样的容器,内部都内置了迭代器,以各种容器也就是数据结构的集合。也就实现了容器和算法的分离。使用的时候,我们拿到迭代器,就可以用算法支持的迭代器进行处理了。

以上是我对泛型算法的理解,下面对各类迭代器进行说明。111

input_iterator (输入迭代器):输入迭代器只能向前一步一步向前读取元素,而且一个位置只能读一次。

Output_iterator(输出迭代器):输出迭代器只能用来向前一步一步写入元素,一个位置只能写入一次。

Forward_iterator(前向迭代器):前向迭代器基本能做输入输出迭代器可以做的一切事情,既可以读取,也可以写入,而且还可以多次,但是没变的是也只能一步一步的向前,不可跨越。

Bidirectional iterators(双向迭代器):双向迭代器在前向迭代器的基础上做了修改,增加了后退的操作,所以叫双向,同时也保存了前向迭代器的一切特性,但是也只能一步一步的操作,不可跨越,支持他的容器有List set multiset map multimap 。
 

猜你喜欢

转载自blog.csdn.net/weixin_39804483/article/details/83032666
今日推荐