范型编程与STL 学习笔记(一)

原创 2007年10月14日 16:17:00

最近对STL比较入迷,相信喜欢C++的同仁都有这样的感觉。我不是那种只满足于会用的人,希望能了解其设计理念,以及具体实现。应该说对于C++程序员来说,阅读STL源代码是一门必修功课。在程序设计的时候,关于STL的错误往往都是直接指向STL源代码,对源代码不熟悉,或者是对STL不熟悉,要精确的排错,困难程度较大,有了STL后,可以显著的提高开发速度,这是不错的,但是可能会在维护上带来较大的麻烦。如果能一窥STL的源码,那么或多或少能帮助自己解决编码错误和维护困难。STL已经存在,不用自己写,那么至少来说,看看应该是自己的责任,当然如果不用STL,就另当别论。其实,大家都知道STL设计得相当好,就算不用,为了提高自己的实力,也是应该看看的。至少我就不是单纯为了用用而学习它。

STL用起来还算是比较简单的,其接口足以满足绝大多数的要求,但是对于C++语言来说,感觉又加上了一层难度,对于各种迭代器,容器,函数对象等等概念,都必须花时间学习。C++给本人的感觉,有时就是觉得很繁琐,复杂,入门的门槛比较高。初看STL源代码的时候,对于那些Typedef,就像看天书一样,多而杂,压根不知道为什么定义那么多。《STL源码剖析》也没有说得很清楚,正如书上所说,它的观众压根就不是初学者。在看到了《范型编程与STL》后,我知道这就是我要找的书,对范型编程的初学者来说,是一本非常好的入门的书。STL就是范型编程的杰作 ,对范型有所了解后,肯定会对STL的理解带来很大的好处。

顺便说一句,国外的书籍就是好,事务阐述得清清楚楚,彻彻底底。反观国内的书籍,哎,暂且不表。该书共分为三篇,刚把第一篇看完,包括STL 巡礼, 算法与区间, 再论Iterators(迭代器or范型指针),Function Objects(函数对象),Containers(容器)这五个章节。通过这5章,基本上对范型编程有个了解。自己对其中的Iterators和Function Objects的印象非常深入,在平时的运用中,Iterators用得是比较多的,同样,对它的概念,设计和内部实现也是自己最想知道的。在看完这章后,我基本上了解了自己想了解的东西,Iterator concept共有5个,Input Iterator、Output Iterator、Forward Iterator、Bidirectional Iterator 和 Random Access Iterator,我讨厌死记硬背这几个概念,虽然有时还是有好处(一师兄在面试的时候被问过),为什么要设计他们才是关键。Iterator确实是一个非常不错的Concept。当然Function Object也不错,本人比较注重实用性,而Function Object满足了我的这一需求。它让人想起了函数指针,让我想起了qsort的使用。Function Object给我的感觉非常好,它比函数指针还要强悍,突出体现的是它能拥有自己的状态,或许这特性没有什么,我最开始也是这样想,但是利用这特性的一个突出成果就是Function Object Adapter(函数对象配接器)。至于Function Object 和Function Object Adapter都能带来什么好处,那么就看看STL中的equal_to、not_equal_to、greater 和 binder1st、binder2nd吧。

仅仅着眼于 Iterator 和 Function Object 还是不够的,我最感兴趣的是他们的实现和思想,就其实现而言,充分使用了Template ,对,就是模板,它的弹性、效率、重载、类型安全等特性使STL从思想成为可能,使库不失效率和弹性。就像围棋美女毛佳君一样——美貌与智慧的结合。自己平时很少用Template,当却不能阻止我对它的着迷,在这本书里,自己对它有了更深入的认识。重载对于面向对象编程来说也是不可少的,在C++中重载操作符,也是实现STL的一个关键因素。平时的对于这方面的东西运用的少,没有对操作符全套的使用,更加没有那么灵活的运用。学习几章对自己的帮助非常大。

对于背后的思想,呈现在大家面前,且广为人知的是,STL把数据和算法Decouple了,我想最原始的思想应该不是这个,STL之父认为算法是定义于代数结构基础之上的,这个观点引领着他。然后STL影响了几代程序员,真是奇妙,他的最终目的是让程序更加的灵活和泛化。现有思想,再选择了C++语言,为此,自己以后应该创造性的运用语言工具,而不仅仅是局限于它,重要的还是思想和设计。

《泛型编程与STL》读书笔记

本书从概念和设计上讲述了泛型编程。个人认为只需要阅读前面九章即可(实际上我只读了前面七章),后面章节是一些算法和API的讲述,可以在用到的时候再来查阅。 全书N次提到concept,model以及re...
  • mr_cai2009
  • mr_cai2009
  • 2015年01月05日 17:01
  • 1176

学习编程有必要做笔记吗?

小编发现W3Cschool的程序员很喜欢记笔记,桌面永远挂着个笔记软件,笔记本也写的密密麻麻的。那么做编程真的有必要做笔记吗?怎么记呢?一起来看下知乎网友怎么说。 @花生PeA记不记笔记看情况。 比如...
  • w3cschoolcn
  • w3cschoolcn
  • 2017年04月05日 16:07
  • 1515

《STL源码剖析》学习笔记

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

Lua学习笔记之迭代器与范型for

Lua学习笔记之迭代器与范型for 1、  迭代器与闭包 迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,也就是它知道来自于哪...
  • wcluojiji
  • wcluojiji
  • 2014年11月24日 19:04
  • 598

读书笔记之《七周七语言——理解多种编程范型》Ruby语言学习

正如此书中简介所介绍的一样,作为一个程序员,想要提高自己的编程水平,学习了解各种编程语言是一个很有效的途径。通过吸收各种语言的精髓融入到自己最熟悉的语言代码中去。也许你只是一个Objective-c程...
  • eric_XJJ
  • eric_XJJ
  • 2013年04月01日 01:05
  • 1638

范型编程与STL--第一章(1)

1.STL算法范型不和任何特定数据结构和对象类型绑定一起 2.STL可以扩容的 3.iterator的适用范围可以从普通c语言指针到输出流的外层包装,很广泛 自己动手写一个从输出流一次返回一行的...
  • u011391093
  • u011391093
  • 2015年06月17日 15:48
  • 282

STL入门教程 设计模式 范型编程

  • 2015年01月21日 21:50
  • 37.6MB
  • 下载

STL范型编程

  • 2007年08月25日 11:02
  • 6.52MB
  • 下载

范型编程与STL 侯捷翻译 超星

  • 2009年11月22日 21:54
  • 6.76MB
  • 下载

泛型编程与STL学习笔记之迭代器

泛型编程与STL学习笔记之迭代器 什么是iterator? iterator是指针的概括物,它是用来指向其他对象的一种对象(它可不仅仅是指针哦,指针应该来说是迭代器的一种) 首先向大家阐明两...
  • u012736084
  • u012736084
  • 2014年02月05日 20:15
  • 1100
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:范型编程与STL 学习笔记(一)
举报原因:
原因补充:

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