STL源码剖析第三章迭代器和traits编程技法读后感

迭代器类似于指针的对象,内中管理着元素指针,对于*、->、++、--等操作符进行重载,管理着对象的创建和删除。

对于迭代器的使用的时候需要相对应的型别,所以利用traits技法,来获取型别定义对象。

traits就是特性萃取机,定义一个iterator_traits类,在类中使用typedef对于模板中的参数进行重命名,这样我们就能获取传递的参数的型别,对于特定的类型如原始指针,我们可以特化一个版本的模板。

5中常用的型别:value_type、difference_type、pointer、reference、iterator_category。

1、value_type:迭代器所指对象的型别。

2、difference_type:表示两个迭代器之间的距离。

3、reference:传递一个对象,令其代表迭代器所指对象,返回的型别就是T&

4、pointer:传递一个对象,令其代表迭代器所指对象的地址,返回类型为T*

5、iterator_category:迭代器有5类,Output_iterator(只写)、Input_iterator(只读)、Forward_iterator(区间读写)、Bidirectional_iterator(双向移动区间读写)、Random_Access_iterator(包含指针所有操作)。对于当前类继承前一个类除了Input_iterator。

对于一个函数,获取迭代器类型,调用一个新的函数,将迭代器类型当参数,利用函数重载使用对应的新的函数。

对于每个函数模板参数名要使用最底层的类型,因为子类的迭代器可以使用父类的函数,因为子类的权限包含父类的权限,使用类的继承消除了传递调用的函数。

 

__tyep_traits

萃取型别的特性:例如:non-trivial assignment 、non-trivial copy ctor等。

需要创建一个新的类,对于这种型别对应那些类,这些类仅用来判断是那些操作,如果是不同的类将会调用不同的函数进行不同的操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值