自己动手实现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,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...
随机推荐
- C# 生成二维码并且在中间加Logo
今天做项目的时候有个在生成二维码并且在中间加入Logo的需求,动手试了几把,总感觉效果没有之前写的好,就翻出旧代码,果然还是熟悉的味道,生成一张效果图如下 左边是微信里面的,右边是我自己生成的 原理比 ...
- android 开发自建wifi热点的默认ip
android 开发自建wifi热点的默认ip是:192.168.43.1 (小米3测试)
- IntelliJ IDEA 文件夹重命名--解决重命名后js文件引用找不到路径报404错误
情景: 说明:ExtJS是我后来的改的名字--原来叫extjs,可是当我把在页面的引用地址改为 src="ExtJS/.."后页面就报404错误,我把它改回之前的extjs就可以( ...
- 【转】KM匹配题集
转自:http://blog.csdn.net/shahdza/article/details/7779324 [HDU]2255 奔小康赚大钱 模板题★1533 Going Home 模板题★242 ...
- 【模板】Big-Step-Giant-Step 大步小步
求一个 的最小整数解 bsgs 当h是质数的时候使用 extbsgs 不满足上面那种情况的时候 具体参见http://tonyfang.is-programmer.com/posts/178997.h ...
- 获取c++ edit控件内容
CString str1,str2; ((CEdit*)GetDlgItem(IDC_EDIT1))->GetWindowText(str1); ((CEdit*)GetDlgItem(IDC_ ...
- linux网卡速率和双工模式的配置
linux网卡速率和双工模式的配置 (2012-09-06 14:39:57) 转载▼ 标签: 科技 网络接口 协商 网卡 工具 it 分类: Linux 改变网络接口的速度和协商方式的工具miito ...
- JsRender系列demo(4)-if else
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- POJ2676Sudoku
http://poj.org/problem?id=2676 题意 : 这个是我最喜欢玩的数独了,就是一个9乘9的宫格,填上1到9九个数字,每行每列每个宫格之内不能有重复的数字,给出的九宫格中,0是待 ...
- DJANGO问题--Error: ‘ManyRelatedManager’ object is not iterable
http://www.itblah.com/django-error-manyrelatedmanager-object-iterable/ Django: Error: ‘ManyRelatedMa ...