自己动手实现STL:前言
一、前言
最近,刚看完《STL源码剖析》,深深被实现STL库的那些的大牛们所折服。同时又感觉自己与大牛们差距之大,便萌生深入学习之意。如果仅仅只是看看《STL源码剖析》的话,又恐对STL的理解又不是非常深刻。故,打算自己动手也去实现下STL的关键组件,又思及自己水平有限,所以,就按照其源码自己重新对着编写一遍,同时在其中加上自己的注释、理解,加深印象。
二、计划安排
打算的编写顺序,基本与《STL源码剖析》所讲解的顺序基本一致。先编写内存配置器stl_alloc.h,然后是内存的基本工具函数stl_uninitialized.h和全局的用于构造析构函数,再之后,便是迭代器的先关的内容,最后是一些容器实现。如果有时间,可能还会实现下一些常用的算法,如:copy等和一些仿函数。
三、命名的规范
由于自己水平有限,是对照着源码去实现,所以函数名,类型名,成员变量等一律与源码一致。改动之处是文件名加上wjzh后缀,对应文件的宏也加上WJZH后缀。另外的不同之处,就是由于我所使用的系统一般是ubuntu12.04,对类模版的偏特化等支持已经非常好了,所以源码中针对一些不支持的编译器的另外实现,我都为了节省时间,略去。另外,我会在源码实现的核心部分,加上自己的理解注释。
四、参考资料
后面博客中有些的理解或者说明性的文字,可能是直接来源于《STL源码剖析》,或者经过我自己理解后所写。并且后面有些为了方便理解,所使用的说明图,也可能是来源于该书。由于比较繁杂,我就不在引用之处一一指出,在此统一指出。也在此感谢该书对于我理解STL的帮助。
自己动手实现STL:前言的更多相关文章
- 自己动手实现STL 02:构造析构的基本工具construct()和destroy()(stl_construct.h)
一.前言 上一篇,我先完成了对内存配置器的实现.然而后面在内存上的算法还依赖于两个全局函数,construct()和destroy(),前者负责在指定的内存上调用对象的构造函数,在内存上构造出对象.后 ...
- 自己动手实现STL 01:内存配置器的实现(stl_alloc.h)
一.前言 在STL中,容器是其中的重中之重,基本的STL中的算法,仿函数等都是围绕着容器实现的功能.而,内存配置器,是容器的实现的基础.所以,我第一次要去编写便是内存配置器的实现.在STL中,内存配置 ...
- 自己动手实现STL 03:内存基本处理工具(stl_uninitialized.h)
一.前言 前面两篇已经编写了内存配置器和建构解构工具函数.这里,就准备编写并介绍下内存基本处理工具函数.比如uninitialized_copy().uninitialized_copy和 unini ...
- 《Effective STL中文版》前言
<Effective STL中文版>前言 我第一次写关于STL(Standard Template Library,标准模板库)的介绍是在1995 年,当时我在More Effec ...
- 动手实现自己的 STL 容器《2》---- list
1. 序: 本文参考了侯捷的 <STL 源码分析>一书,出于兴趣,自行实现了简单的 list 容器. 学习了 STL 的 list 容器的源代码,确实能够提高写链表代码的能力.其中的 so ...
- 动手实现自己的 STL 容器 《1》---- vector
本文参考了侯捷的 <STL 源码分析>一书,出于兴趣,自行实现了简单的 vector 容器. 之后会陆续上传 list, deque 等容器的代码,若有错误,欢迎留言指出. vector ...
- STL模板前言(1)
STL提供以下数据结构方便使用: 顺序容器: vector(动态数组):从后面直接插入删除元素,直接访问任何元素. deque(双端队列):从前面和后面快速插入删除,直接访问任何元素. list(双链 ...
- Hadoop2 自己动手编译Hadoop的eclipse插件
前言: 毕业两年了,之前的工作一直没有接触过大数据的东西,对hadoop等比较陌生,所以最近开始学习了.对于我这样第一次学的人,过程还是充满了很多疑惑和不解的,不过我采取的策略是还是先让环 ...
- 详细解说 STL 排序(Sort)
0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...
随机推荐
- ifame 跨域高度自适应
代码如下:var iframeids = ['memberIndexIframe','inquiryCenterIframe','everychinaBbsIframe']; var iframehi ...
- C# WPF打印报表
前天我的一个同学由于打印报表而苦恼,所以就介绍了一下WPF的打印报表,希望能帮助到大家. 展示报表 1. 首先新建项“报表”,选定项目,右击,点击“添加”->“新建项”->“报表”
- android 开发解密时出现pad block corrupted 错误
情景:在虚拟机上运行正常的,但是到我的真机上就解密失败,出现pad block corrupted ,据说是版本原因:我机器是小米3 最新版的android 4.2 出现问题的代码: privat ...
- Vbox下linux虚拟机根分区扩容
前言 使用一段时间VBox中的linux后可能会显示根分区空间不足的情况,需要扩容. 通过查阅相关资料,VBox中linux扩容主要有两种办法:通过lvm扩容和通过gparted扩容 LVM条件:VB ...
- centos nginx,php添加到Service
SHELL脚本: nginx vim /etc/init.d/nginx #!/bin/sh # # nginx - this script starts and stops the nginx da ...
- OD鲜为人知的小技巧--搜索通配符(关键字)
我看过一些OD教程,关于通配符这一点很少有人讲解(大概是我看的教程少吧) 近日通过看<黑客反汇编揭秘(第二版)>第165页了解到,原来OD还有这样方便的功能,那就是搜索通配符: Olly ...
- jquery css 简单笔记
内容 要点:清空表单中所有数据,除去 button,submit,reset,hidden 的数据 $(':input','#myform') .not(':button, :submit, :res ...
- Java学习第二篇:类,对象,成员属性,成员方法,构造方法,类变量,类方法
一.类的定义 一个全面的类定义是比较复杂的, 定义如下:
- Unity3d 模型导入选项
- MongoDB 性能优化五个简单步骤
MongoDB 一直是最流行的 NoSQL,而根据 DB-Engines Ranking 最新的排行,时下 MongoDB 已经击败 PostgreSQL 跃居数据库总排行的第四位,仅次于 Oracl ...