STL源码分析(1) -- STL介绍和源码分析之前的一些准备

作为一个初学者,我最头疼的事就是分析源代码,但是不管怎么样,这块硬骨头始终需要我们去啃,因为当我们对一门语言的语法有个基础的了解之后,能加深对这么语言的理解和应用的最好最快的办法就是分析源代码了,所以我选择对C++的模板库进行源码分析。

首先,因为C++标准中只规定了,STL中每个类的接口,并没有规定它的具体实现,所以,对于STL的实现,流行着好几个不同的版本,关于这几个版本的详细介绍,在侯捷前辈的《STL源码剖析》中可以找到,这个大家可以自己找资料了解一下。不过,在这些实现版本中,以SGI版最为经典,但是它的源码不适合我们初学者直接上手分析。所以,一般我们都会选择VC6.0里面的实现版本 -- PJ版本,因为该版本的作者是P.J.Plauger,所以称为PJ版本。

PJ版本,如果大家有装VC++6.0的话,一般会在  C:\Program Files\Microsoft Visual Studio\VC98\Include  这个目录下找到PJ版STL的头文件,如果找不到,你也可以先创建一个STL容器的对象,例如list<int> my_list;编译,右键选择转到定义,找到list的头文件。


点击弹出菜单的 Go To Definition Of list  即可

因为vc6.0在64位机运行效果不太好,所以想要安装vc6.0的 话建议在虚拟机上装xp安装vc6.0,对于初学者来说,最好还是使用vc6.0。

如果你没有vc6.0 而且  你也不想安装它,我已经上传了这些源代码,你可以在这里下载  http://download.csdn.net/detail/github_36186488/9667968

我也上传了SGI版的STL源码,大家可以在这里下载  http://download.csdn.net/detail/github_36186488/9667971

另外 关于源码分析   大家可以参考两本书   PJ版的源码分析《STL中文版》 SGI版的源码分析 侯捷前辈的《STL源码剖析》

这两本书,我也都上传了   供大家参考   

《STL中文版》 http://download.csdn.net/detail/github_36186488/9667981

《STL源码剖析》   http://download.csdn.net/detail/github_36186488/9667978


 

关于vc6.0因为比较大,我先不上传了,大家可以自己先找找,如果实在找不到,可以联系我。

下次我将会为大家分析PJ版的list源码,如果有同样在学C++的同学,我们可以相互关注,共同进步。

内容简介回到顶部↑这本书不适合C++ 初学者,不适合 Genericity(泛型技术)初学者,或 STL 初学者。这本书也不适合带领你学习面向对象(Object Oriented)技术 — 是的,STL 与面向对象没有太多关连。本书前言清楚说明了书籍的定位和合适的读者,以及各类基础读物。如果你的Generic Programming/STL实力足以阅读本书所呈现的源码,那么,恭喜,你踏上了基度山岛,这儿有一座大宝库等着你。源码之前了无秘密,你将看到vector的实现、list的实现、heap的实现、deque的实现、RB-tree的实现、hash-table的实现、set/map 的实现;你将看到各种算法(排序、搜寻、排列组合、数据移动与复制…)的实现;你甚至将看到底层的memory pool 和高阶抽象的traits 机制的实现。那些数据结构、那些算法、那些重要观念、那些编程实务中最重要最根本的珍宝,那些蜇伏已久彷佛已经还给老师的记忆,将重新在你的脑中闪闪发光。 目录回到顶部↑庖丁解牛(侯捷自序) i 目录 v 前言 xvii 本书定位 xvii 合适的读者 xviii 最佳阅读方式 xviii 我所选择的剖析对象 xix 各章主题 xx 编译工具 xx 中英术语的运用风格 xxi 英文术语采用原则 xxii 版面字形风格 xxiii 源码形式与下载 xxiv 在线服务 xxvi 推荐读物 xxvi 第1章 STL 概论与版本简介001 1.1 STL 概论 001 1.1.1 STL的历史 003 1.1.2 STL与C++ 标准程序库 003 . 1.2 STL 六大组件 - 功能与运用 004 1.3 GNU源码开放精神 007 1.4 HP STL实现版本 009 1.5 P.J. Plauger STL实现版本 010 1.6 Rouge Wave STL实现版本 011 1.7 STLport 实现版本 012 1.8 SGI STL实现版本 总览 013 1.8.1 GNU C++ header 文件分布 014 1.8.2 SGI STL 文件分布与简介 016 STL 标准头文件(无扩展名) 017 C++ 标准规格定案前,HP规范的STL头文件(扩展名 .h) 017 SGI STL 内部文件(SGI STL真正实现于此) 018 1.8.3 SGI STL 的组态设定(configuration) 019 1.9可能令你困惑的C++ 语法 026 1.9.1 stl_config.h 中的各种组态 027 组态3:static template member 027 组态5:class template partial specialization 028 组态6:function template partial order 028 组态7:explicit function template arguments 029 组态8:member templates 029 组态10:default template argument depend on previous template parameters 030 组态11:non-type template parameters 031 组态:bound friend template function 032 组态:class template explicit specialization 034 1.9.2 临时对象的产生与运用 036 1.9.3 静态常数整数成员在class 内部直接初始化 037 in-class static const integral data member initialization 1.9.4 increment/decrement/dereference 运算子 037 1.9.5 "前闭后开"区间表示法 [ ) 039 1.9.6 function call运算子(operator()) 040 第2章 空间配置器(allocator) 043 2.1 空间配置器的标准接口 043 2.1.1 设计一个简单的空间配置器,JJ::allocator 044 2.2 具备次配置力(sub-allocation)的SGI 空间配置器 047 2.2.1 SGI 标准的空间配置器,std::allocator 047 2.2.2 SGI 特殊的空间配置器,std::alloc 049 2.2.3 构造和析构基本工具:construct() 和 destroy() 051 2.2.4 空间的配置与释
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值