文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>《STL源码剖析》 读后感

《STL源码剖析》 读后感

时间:2010-08-26  来源:chinazhangjie

《STL源码剖析》读后感

小引:

  从2010.08.09开始阅读《STL源码剖析》,以理解和抄源码的方式终于在我下笔的前一刻(2010.08.25)宣告结束!原计划每天看40页,结果在书籍的某些章节耽搁了一些时间,所以只能“拖到”了现在。

正文:

  在提这本书以及C++ STL之前,有一个人是必须要提的,那就是本书的作者——侯捷老师(我不喜欢叫他“大师”,是因为我情愿做他的“学生”)。侯捷我想我不必多做介绍,每个学C++的,学泛型编程的,甚至每位IT内搞技术,都应该知道他的。如果你不知道,那么你out了(嘿嘿,玩笑)。“小弟对他的敬仰之情,犹如滔滔江水,连绵不绝;黄河泛滥,一发不可收拾……”。这本书是我第四次拜读他的大作了,《深入浅出MFC(侯捷著)》、《C++标准程序库(侯捷译)》、《Effective C++(侯捷译)》、《STL源码剖析(侯捷著)》以及我下一本将要读的《泛型编程与STL(侯捷译)》。令我钦佩的不只是他在技术上的造诣,还有他的文笔。当我读《深入浅出MFC》时,我真的不能相信这是一本技术书籍,这简直是一个文学作品。当然还有他对技术、对读者负责任的态度,等等。总之,在我心中,它是一位“良师”!

  说实话,我不知道怎么写一篇读后感。加之,我的文笔又很烂(哎,想当年那是相当拉风啊,没想到上了两年大学,都没了!),所以我只以我自己的方式来叙述,希望“专业人士”见谅!

  话要从STL六大组件说起,STL六大组件为:

  1、容器(containers)

  2、算法(algorithms)

  3、迭代器(iterators)

  4、仿函数(functors)

  5、配接器(adapters)

  6、配置器(allocators)

  第一章 STL概论与版本简介,我是以读小说的形式,“读了一遍”。现在除了GNU和后两小节之外,其他的印象不太深刻了,因为我看不太懂。这种开头形式的书看多了,也就见怪不怪了。曾经我和祥子(我的舍友)谈论过这个问题,这是巨著一个共同特点,开始扯好多,让你听故事,你可能听的很happy。当长长的故事讲完了,开始将技术了,你傻了……。我觉得这是必要的,比如你要看《windows程序设计》给你讲讲windows发展史,也应该吧。Ok,打住。

  第二章空间配置器allocator。我看看懂了七成,改变了我以前的很多观念。比如new和malloc的区别?new会自动调用对象的构造函数,这个答案以前开始我很满意,但是读了之后,我很不满意。只有你知道place new,set_new_handler以及new背后到底做了那些东西,你才会彻底的明白为什么new比malloc安全,new怎么就调用了malloc。说实话,当时我看了之后犹如醍醐灌顶。不过到现在为止我搞混一些东西,比如调用哪个函数分配内存,调用哪个函数构造对象以及,new失败后set_new_handler会怎么处理?所以以后再看一遍,好好分析一下,是很有必要的。

  第三章迭代器(iterators)概念与traits编程技法。一开始我觉得STL很多技术多余了,比如提供很多重载。以及令我很不解和trairt。越读到后面的章节,我越感觉到迭代器和traits简直是神作,和其他技术配合的简直太完美了。这种感觉,这不是第一次。早在读《深入浅出MFC》几大宏的时候,两个字“头大”,但是当我看懂了源码,直到我明白了个中道理,我紧不住惊呼“太完美了”。相信你也有过这种感觉。言归正传,正是因为我的不解,所以在看的时候很多技术细节没有注意到,看到后面章节的时候不得不翻过来看!

  第四章和第五章讲解了序列式容器和关联式容器。早在看《C++primer》(第四版)的时候学到过这些东西,大体知道有那些容器,知道有哪些功能。但是没有源码,具体怎么实现的。在这里,你可以一剖全貌(搞的我跟做广告似的,O(∩_∩)O~)。基于顺序表,链表实现的容器,很很容易看懂。但是基于tree,heap等数据结构的东西,就很难为我了。话说当前学习数据结构的时候老师使用C#讲解的,对我们只学了一学期C语言,语言还没有入门的我(其实可以说我们了),障碍非数据结构和算法,而是语言。所以我就苦学C#,我还依稀记得我看完《C#高级编程》基础篇之后,就卡了,看不下去了。那时候的我,才意识到我应该攻我有一点点基础的C,所以我又开始学C。等我C入门了以后,才发现数据结构马上就要结课了,大一下半学期已经过半。所以数据结构对我来说除了顺序表,链表,栈,队列很了解之外,其他的真是模模糊糊了。比如查找只会折半查找,排序只会选择排序。Ok,回到正题。所以看起来那真叫一个痛苦啊,也在这里拖了好几天,一天就看10来页。

   第六章是算法。看这章,让我回到了看《C++标准程序库》的感觉,因为基本算法,只要不是基于某一个数据结构的算法,看起来就和切菜一样。就算你没有学过STL其他东西,这章也是值得一看的。就当是在看中文版的msdn,如果看不太懂还可以看源码,何乐而不为呢?我觉得这章也是很实用的一章,写程序的时候你可以切身体会到它的作用,不想配置器,只是默默的在背后工作。对了,很重要的一点是,STL的效率(我感觉有点“为达目的,不择手段”,呵呵),在迭代器和traits的完美配合下,对每一种用户提及到的类型,就会以尽可能的效率完成工作,如查找,排序(尤为明显)。

  第七章仿函数。像一杯茶,一个座椅,你可以歇歇脚。很短的一个章节,讲解了仿函数,也不难,恩,不错!但是我觉得仿函数的设计者真是巧夺天工,真是佩服。

  第八章配接器。这个章节也不是很长,设计精巧。容器配接器相对比较简单,迭代器配接器和仿函数配接器稍微麻烦一些,但是看起来难度不大。仿函数和配接器理解,都属于短小精悍型的,设计巧妙。

  纵观六大技术,容器和算法对程序员应用来说最为有用;迭代器就像一根线将所有部件全部都连接了起来;而配置器是一个默默工作者,至关重要,却不露面。

  ……

  我不想写了,越写感觉越吃力,可能是技术不够吧,以后不能写此类文章了,感觉太纠结!

  最后根据我的个人的小小经验,对即将要看《STL源码剖析》的同志提一些建议:

    1、C++基础知识要牢固,用C++写过一定量的程序。

     2、  熟悉C++ template,对一些基础概念要熟悉。如果不知道怎么下手,建议看完《C++ template》第一篇,我想你就熟悉了。

       3、  在学STL之前一点STL知识一年概念都没有的话,建议就不要看了。可以先看《C++ primer》、《C++ STL》或《C++标准程序库》。

       4、  如果你的数据结构和基本算法有点模糊,那么我建议先去熟悉数据结构和基本算法吧!

  Ok,建议就这么多了,如果这4条兼备了,我想你至少可以顺利的看完了《STL源码剖析》了。

 

ps:小弟才疏学浅,如果文章存在技术上或者其他方面的问题,欢迎斧正!

相关阅读 更多 +
排行榜 更多 +
幸存者的命运

幸存者的命运

飞行射击 下载
精英战区3d

精英战区3d

飞行射击 下载
货运猎人

货运猎人

飞行射击 下载