traits如何萃取出iterator的category

        接上一篇文章,其实我们前面四个特性,我们都好理解。但是到了iterator_category(迭代器的分类)时候,其实很多人会困惑,如何才能够精准的萃取出他的分类呢,毕竟每个迭代器只对应一种分类;

        迭代器总共有五中分类(英文简写):input(只写)、output(只读)、forward(一次只能前进一个单位)、bidrection(一次只能前进/后退一个单位)、random (可以随机进行移动,想去马力就去哪里),当我们的算法向迭代器进行询问,容器的分类是啥时候,迭代器要给算法进行回答,因为每个分类都有着不同的权限;所以我们要对每一个迭代器,根据容器的特性进行迭代器类别的区分;

        举例子:对于list迭代器来说,当我们知道迭代器为list_iterator时候,我们就能够通过萃取机萃取出其特性     ---  我们由此也知道了list的迭代器被萃取机萃取之后的分类是:bidrection,我们又可以对这个bidrection_tag进行advance()、distance()等函数计算时候进行区分;

        

        问题又来了,我们可以对定义过的迭代器进行萃取,那我们原生指针int* 这些怎么办,总不能说就不管了,你不告诉算法,酸粉也不能进行后序的计算啊;所以为了能让萃取机同样萃取出原生指针的五大特性,我们也对其进行了萃取;int* , char* ,char等类别都是random,所以直接会给他们打上random标签;如下图:

 

         至此,我们也就明白了,萃取机如何萃取出每一个迭代器的category,至于tag之间的关系,以及其中更加复杂的逻辑,这就要自己阅读源码了。迭代器,其中比较重要的东西就说完了。其实迭代器本质上就是一个中间商,这个中间商他很好的衔接了算法和容器,使得数据和方法得以分离,有很好的将他们衔接在了一起。算法问他要什么,迭代器能够给予他想知道的事情,接着对容器进行操作。那容器里面又是什么,存储的是什么东西?如何存储的?容器之间的关系又是什么?有多少个容器?后面慢慢说呗~

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值