用一个问题来引出这个话题:我们在写C++语言的时候,经常会使用迭代器,例如:
vector<int> ::iterator it = ans.begin(); (ans是一个vector<int>对象)
我们接着会使用it这个迭代器,进行一系列操作,但是迭代器里面有什么呢?为什么你的操作能够得以实现?我们不妨深入的探讨一下iterator!
1. 首先我们说一下迭代器:其实类似于指针的对象,有了他我们可以进行成员访问 *it = 9;将it指向的地方赋值为9;其实说白了,我们在进行一系列算法操作的时候,要去访问容器内部,我们能否有一个统一的接口,算法能够通过这个接口,对容器进行操作,但是我们又不能暴露容器内部的结构!说白了迭代器就是一个中间"粘合剂",将算法与容器很好的粘合在了一起;
说白了,就和个操作系统一样,一个中间件。但是我们使用好这个中间件,可以大幅度的提升我们程序效率;
2. traits: 问题来了,我们在使用迭代器的时候,可以很随意的给他类型,但是不同的类型之间有区别的,但是在iterator中,好像看不出啥区别,统一使用,这又是为什么?所以这里就引出了第二个话题traits(萃取机):我的理解是萃取出对应迭代器的特性,这些特性我们统一标识;例如: 1,2,3,4,5,9.1这几个数,我们可以明白前5个是int型,最后一个是float型,而萃取机其中的作用就是能够得到他们的类别,这样的话在有些算法中很有用的;
回到traits与iterator之间的关系,其实是iterator通过traits得到了他想要的一些特性:
这个特性不止说是类型,还有difference_type(容器最大容量)、pointer(容器所指之物)、reference_type(所指对象内容)、iterator_category(迭代器型别)
女朋友下班啦,给小仙女打电话去,下一篇,我在细说traits如何去萃取出这些特性