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

最近对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++语言,为此,自己以后应该创造性的运用语言工具,而不仅仅是局限于它,重要的还是思想和设计。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值