《STL源码剖析》学习备忘

 目录:
疱丁解牛(侯捷自序)
目录
前言
第1章 STL概论与版本简介
第2章 空间配置器(allocator)
第3章 迭代器(iterators)概念与traits编程技法
第4章 序列式容器(sequence containers)
第5章 关联式容器(associattive containers)
第6章 算法(algorithms)
第7章 仿函数(functors,另名 函数对象function objects)
第8章 配接器(adapters)
附录A 参考书籍与推荐读物
附录B 候捷网站(本书支持站点简介)
附录C STLPort 的移植经验(by孟岩)
索引

【3 Iterator traits】

  1. 算法要泛化,iter要有相同动作。但其实现细节不可避免地因容器而异。所以容器负责提供iter。不同容器需要不同iter类型。
  2. 算法要根据不同容器、不同元素因地制宜提高效率。iter类型代表容器,*iter代表元素。算法内部不可避免要用到iter所指元素的类型(如,提供临时变量)。
  3. C++没有typeof(),编码时无法指定iter所指元素的相关型别如int,int *,const int&。
  4. 函数模板的参数推导机制可行:<T>f(T iter){g(iter,*iter)} ,<T1,T2>g(T1 iter,T2 t) 途径T-iter--*iter-T2 ,不能推导返回参数
  5. 类模板声明内嵌型别可行:<T1>iter{T1--type} <T> T::type func(T iter ) ,但对指针型iter,无法指定type。
  6. 模板偏特化机制可行:加iterators_traits可以为指针提供特化版本,其他就多一层。这样同一建立内部型别,更完善(代码简洁)。
  7. 但是,如果iterators_traits<const int*>::value_type将得到cont int,而我只想要int!再来个偏特化。
  8. value、diffrence、ref、pointer、iter_cate
  9. 算法需要知道iter之类。分支判断可行(执行期决定)。应该编译期确定。
  10. 每个iter都要指明相关型别(typedef ),自制选itertor模板;iterators_traits从T获知相关类型。每个算法都要知道iter种类,并由此调用相关子函数。关键:用class做标签。
  11. 例子:advance(iter,n)-->参数推导出T-->typedef trait::cate tag()-->调用 _advance(iter,n,tag())-->无名对象也是对象-->实参推导出类型-->函数重载出函数。
  12. 所谓STL,就是利用编译器的推理完成确定的事情,如求和1~100。这样编译时间长,代码简洁优化。多用inline,const,&

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值