STL源码刨析笔记---traits与iterators

        用一个问题来引出这个话题:我们在写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如何去萃取出这些特性

        

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值