seekerhit 2019-12-14
看了书和老师的讲解,这里大体说一下自己对迭代器和萃取技术的理解。
迭代器它是C++标准模板库里面的智能指针(smart pointer),由于STL设计时并不是以OOP思想为指导,而是以GP,所以让容器与算法分离实际,这么做的好处是可以让各个模块的设计者无需去关系其他模块的实现,从而专心于自己的模块,所以迭代器是用于连接容器和算法的桥梁。
OOP(Object-Oriented programming)//面向对象的程序设计 GP(Generic Programming)//泛型程序设计
作为智能指针,它必须重载一些指针的特性如,* 和 ->
上图为双向循环链表迭代器的实现对指针常用符号的重载。
它为了连接容器和算法,迭代器在设计上也是一个类,而且它必须回答算法的5个“问题”(这里的意思是迭代器必须给算法指明容器的数据类型等必要问题,不然算法无法工作)。
这5个问题就是必须回答的5中associated types。
然而,在回答这5个问题是就用到了一种技术叫做萃取。这里其实也和容器间的实现有关。例如我们常用的array,它的设计实现就是使用连续空间,所以它的迭代器就是原生指针。而一些在空间结构上非连续空间的容器的迭代器则不是这样。
迭代器的萃取技术即为了分离class iterators和non-class iterators
在这个过程中,就用到了之前学习的偏特化技术,发现该迭代器的类型是原生指针或常量指针,则使用为其专门设计的回答问题函数。