《STL源码剖析》学习备忘

原创 2007年10月10日 22:39:00

 目录:
疱丁解牛(侯捷自序)
目录
前言
第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,&

 

 

《STL源码剖析》学习笔记

第二章:空间配置器(allocator) 考虑到小型区块可能造成的内存破碎问题,SGI设计了双层级配置器。 当配置区块超过128bytes时,便调用第一级配置器,即直接使用malloc() free(...
  • qiaominghe
  • qiaominghe
  • 2016年05月27日 09:05
  • 1518

《STL源码剖析》学习之迭代器

在设计模式中有一种模式叫迭代器模式,简单来说就是提供一种方法,在不需要暴露某个容器的内部表现形式情况下,使之能依次访问该容器中的各个元素,这种设计思维在STL中得到了广泛的应用,是STL的关键所在,通...
  • shudou
  • shudou
  • 2013年09月08日 22:54
  • 5814

《STL源码剖析》---stl_map.h阅读笔记

map是STL中的标准关系容器,它存储的元素时pair,拥有键值key和实值value。按照键值key存储到红黑树中,用红黑树提供的函数操作map。...
  • KangRoger
  • KangRoger
  • 2014年08月16日 11:46
  • 3211

Android学习备忘021——FBReader源码修改package name

FBreader源码下载地址:http://download.csdn.net/detail/zyl_android_apk/5352625 1、首先解压并导入源码,完成后能看到工程有错误,...
  • zyl_android_apk
  • zyl_android_apk
  • 2013年05月10日 14:15
  • 1863

【备忘】学习SAS从初级到中级再到高级视频+源码+PPT教程

学习SAS从初级到中级再到高级视频+源码+PPT教程
  • qq_38472118
  • qq_38472118
  • 2017年12月24日 18:41
  • 36

java通讯及备忘功能源码

  • 2010年12月29日 13:17
  • 11KB
  • 下载

e语言源码,事件提醒,记事备忘软件。

  • 2010年06月25日 21:13
  • 541KB
  • 下载

从源码包构建.deb文件的备忘

源码包是什么 我们知道ubuntu有别于gentoo之一的特点就是,gentoo是基于源码包安装的系统,而ubuntu是基于二进制的。我们执行一个apt-get install foo安装包命令时,...
  • redredbird
  • redredbird
  • 2015年06月21日 09:59
  • 1399

【备忘】一套不可多得的Lucene视频教程带课程源码

课程目录:     01_lucenc简介和创建索引初步.avi     02_lucene简介和搜索初步.avi     03_lucene索引_创建_域选项.avi     04_luce...
  • qq_38474069
  • qq_38474069
  • 2017年08月06日 13:00
  • 173

RxJava源码阅读备忘

RxJava2.0中引入了背压概念观察者模式分为两种 被观察者 观察者 是否支持背压 观察者模式的类型 Observable Observer 不支持背压 观察者被动的从...
  • qq_33384000
  • qq_33384000
  • 2017年05月25日 17:51
  • 135
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《STL源码剖析》学习备忘
举报原因:
原因补充:

(最多只允许输入30个字)