侯捷 GP与STL
- 格式:wps
- 大小:387.00 KB
- 文档页数:18
STL源码侯捷注释《STL源码侯捷注释》是一本经典的程序员必备书籍,它为广大程序员提供了深入了解STL源码的机会。
本文将从以下几个方面进行分析和评价。
一、作者介绍侯捷是一位著名的程序员和作家,他曾获得多项国际和国内大奖,包括ACM国际程序设计竞赛金牌、IBM杰出软件奖、国家自然科学二等奖等。
他还是多本计算机书籍的作者,如《STL源码剖析》、《C++程序设计》等。
二、书籍概述《STL源码侯捷注释》是一本详细介绍STL源码的书籍,它对STL的各个组成部分进行了详细的解析和注释。
本书的主要特点包括:1.详细的注释:本书对STL源码的每个细节都进行了详细的解释和注释,使读者能够深入了解STL的实现原理。
2.清晰的结构:本书按照STL源码的结构进行组织,并提供了详细的目录和索引,方便读者查找和理解。
3.丰富的例子:本书提供了大量的例子,帮助读者更好地理解STL的使用方法和实现原理。
4.全面的覆盖:本书覆盖了STL的所有组成部分,包括容器、迭代器、算法、仿函数等。
三、书籍优点1.深入浅出:本书的注释和解释非常详细,但又不失深入浅出的风格,使读者能够轻松理解STL的实现原理。
2.丰富的例子:本书提供了大量的例子,使读者能够更好地理解STL的使用方法和实现原理。
3.清晰的结构:本书按照STL源码的结构进行组织,并提供了详细的目录和索引,方便读者查找和理解。
4.全面的覆盖:本书覆盖了STL的所有组成部分,包括容器、迭代器、算法、仿函数等。
四、书籍不足之处1.过于复杂:本书注释和解释的内容非常详细,但有时候可能会让读者感到过于复杂和深入,不太适合初学者。
2.缺少实战案例:本书提供了大量的例子,但是缺少实战案例,读者可能需要自己去实践。
五、适合读者群体《STL源码侯捷注释》适合以下读者群体:1.对STL源码有兴趣的程序员。
2.希望深入了解STL实现原理的程序员。
3.希望提高自己的STL编程能力的程序员。
4.想要更好地掌握C++语言和STL的程序员。
侯捷老师——STL源码剖析侯捷老师是国内知名的C++专家,他在C++领域有着很高的知名度和影响力。
他的《STL源码剖析》是一本非常经典的C++书籍,深入剖析了C++标准模板库(Standard Template Library,STL)的源代码,并详细解释了其设计思想和实现细节。
下面是对这本书的1200字以上的介绍。
《STL源码剖析》是一本写给C++程序员的经典著作,它由侯捷老师亲自编写,内容非常详尽和深入。
这本书主要介绍了C++标准模板库(STL)的源代码,并解析了其中的设计思想和实现细节。
通过阅读这本书,读者可以更好地理解STL的底层原理,提高自己的C++编程能力。
这本书共分为13个章节,每个章节都涉及了STL的不同组件和特性。
书中的内容既包括理论知识,也包括具体的代码实现。
侯捷老师用通俗易懂的语言和形象生动的例子,对STL的各个组件进行了详细介绍。
他从容器、迭代器、算法和函数对象等方面入手,逐步展开对STL的剖析。
每一章的结尾都有相关的练习题,读者可以通过做题来巩固所学知识。
在《STL源码剖析》中,侯捷老师对STL的源代码进行了深入分析,解释了其中的设计思想和实现原理。
他通过对容器的底层结构和操作进行剖析,揭示了STL的高效性和灵活性。
在对算法和函数对象的讲解中,他详细介绍了STL中的各种常用算法,并解释了它们的内部实现原理。
通过这种深入的分析,读者可以更好地理解STL的运作机制,并能够灵活运用STL进行程序设计。
除了对STL源代码的剖析,侯捷老师还对STL的使用和扩展进行了说明。
他介绍了STL的使用注意事项和常见问题,并给出了一些实用的编程技巧和优化建议。
此外,他还展示了如何扩展STL,给出了一些自定义容器和算法的示例。
这些内容对于想要深入学习和应用STL的读者来说是非常有价值的。
总的来说,侯捷老师的《STL源码剖析》是一本非常权威和深入的C++书籍,对于想要深入学习STL的C++程序员来说是一本必读之作。
面向对象的理论与C++实践清华课程设计一、课程介绍面向对象的理论与C++实践是清华大学计算机科学与技术系本科生专业选修课程,涵盖面向对象编程理论和C++编程实践两个方面,旨在帮助学生深入理解面向对象思想并用C++语言进行实现。
二、课程内容面向对象编程理论1.面向对象思想概述2.类与对象3.继承、多态与虚函数4.抽象类与纯虚函数5.STL库简介C++编程实践1.C++程序设计基础2.类与对象的实现3.继承、多态与虚函数的实现4.STL库的使用三、课程教材《C++ Primer》(第五版)(中文版),作者:Lippman, Lajoie, Moo,译者:侯捷。
四、课程参考资料1.《Effective C++》(中文版),作者:Scott Meyers,译者:侯杰。
2.《STL源码剖析》(中文版),作者:侯捷。
3.《深入浅出设计模式》(中文版),作者:程杰。
五、课程设计要求1.选题要求:要求选好一个项目,体现应用面向对象编程的思想。
2.设计方案包括:给出所设计类的类体及成员函数原型,试画出相应的类图,写出内部数据结构方案的描述,描述各类或各函数功能作用的注释。
3.程序要求:为了反映面向对象编程语言的特征,要使用C++语言进行编程,采用面向对象思想,必须使用类和对象来体现程序设计思想,要充分利用C++语言的特性和STL库进行程序开发。
六、课程设计流程第一阶段:选题第一次课程上老师将介绍课程设计大概内容,学生需要结合个人实际情况,选定一个初步的设计主题,初步选题可与老师讨论资讯。
相当于开题选题环节。
第二阶段:设计方案在确定题目后,需要自己独立完成课程设计方案。
设计方案要求如上述第五部分所说明。
相当于中期论文。
第三阶段:实现程序在建立好方案后,开始进行程序实现。
实现过程中出现问题,需及时向老师或助教请教解决,最终提交实现代码。
相当于结题报告。
七、课程评分标准1.选题:选题是否合理,是否具有一定难度性;2.设计方案:方案是否完善,方案中的类设计是否具有标准性;3.程序代码:代码是否规范,是否达到良好的代码质量,代码是否具有可扩充性、可移植性等软件工程方面的优良特征;4.报告:书面报告是否符合规范,语言表达、图表使用是否得当;5.程序演示:演示时是否条理清晰,是否表现出更高的带了解问题以及解决问题的能力。
stl的使用介绍的书籍STL(Standard Template Library,标准模板库)是C++编程语言的一个重要组成部分,它为C++程序员提供了一套丰富的数据结构和算法,极大地提升了开发效率和代码的可重用性。
本文将介绍几本关于STL使用的优秀书籍,帮助读者更好地掌握STL的应用。
1.《Effective STL》《Effective STL》是Scott Meyers写的一本经典著作,旨在向读者展示如何高效地使用STL。
书中通过丰富的示例和详细的讲解,介绍了STL中各个容器、算法和迭代器的使用方法和注意事项。
同时,书中还提供了许多实用的技巧和技巧,帮助读者写出高质量的STL代码。
2.《STL源码剖析》《STL源码剖析》是侯捷教授编著的一本经典教材,深入剖析了STL 的实现原理和内部机制。
这本书不仅讲解了STL中各个容器和算法的实现细节,还介绍了STL的设计思想和优化技巧。
通过阅读本书,读者可以更好地理解STL的底层实现,提升自己的编程能力。
3.《C++标准库》《C++标准库》是Nicolai M. Josuttis撰写的一本权威性书籍,全面介绍了C++标准库,包括STL在内的各个组件。
书中详细讲解了STL中容器、算法、迭代器、函数对象等的使用方法,并给出了大量的示例代码。
此外,书中还介绍了C++11、C++14和C++17中新添加的特性,使读者了解最新的C++标准库开发技术。
4.《STL教程与案例精解》《STL教程与案例精解》是郝斌编著的一本教材,通过大量的案例和实例,系统地讲解了STL的使用方法和应用技巧。
书中从容器、迭代器、算法等方面入手,深入浅出地介绍了STL的各个组成部分,并提供了丰富的练习题和案例分析,帮助读者巩固所学知识。
5.《STL源码剖析与应用》《STL源码剖析与应用》是李师贺编著的一本专门讲解STL源码和应用的书籍。
书中详细解析了STL的设计思想、实现原理和内部机制,帮助读者深入理解STL的底层实现。
初稿,待完善Visual C++(VC/MFC)学习电子书及开发工具下载请看这里史无前例的网络最全最强C/C++资料索引:∙C/C++编程语言学习资料尽收眼底电子书+视频教程∙VC++/MFC(VC6)开发技术精品学习资料下载汇总∙Visual C++/MFC数字图像处理学习参考资料下载大全∙C++ Builder开发技术相关精品资料下载汇总∙C/C++开发工具/集成开发环境下载汇总∙VC/MFC开发必备Visual C++、Visual Studio、MSDN等下载汇总C++编程语言学习百宝箱(C++ Programming Language):C++ How to Program, 7/e (C++大学教程第7版) 英文原版全彩页C++大学教程第五版(C++ How to Program, 5/e)C++程序设计语言(特别版) 中文版C++程序设计原理与实践(中文高清版) | Programming: Principles and Practice Using C++ (英文原版)The C++ Programming Language, 3rd EditionC++ Primer 第四版中文版C++ Primer 第四版中英文对照文字版C++ Primer 第三版中文版C++ Cookbook 中文版高清PDF下载| O'Reilly C++ CookbookC++Primer Plus(第五版)中文版+习题解答+代码| 英文原版C++程序设计教程第二版钱能易学C++ (Easy C++) 中文PDF文字版附习题答案及书中源码现代C++程序设计C++ 参考大全(第四版)C++大学教程中文chmEffective C++ 中文版Essential C++ 中文版+英文版侯捷译Exceptional C++ Style 中文版C++编程思想(第2版)第1卷:标准C++导引C++编程思想(第2版)第2卷:实用编程技术C++编程思想第1卷标准C++导引C++编程思想第2卷实用编程技术C++编程思想第2卷实用编程技术(中文版)C++入门经典(第三版)中文PDF版+详细书签Google C++编程风格指南C++编程艺术C++编程金典(第3版) 清华大学出版C++编程规范:101条规则、准则与最佳实践C++编程惯用法高级程序员常用方法和技巧疑惑C++实用C++编程大全C++程序设计与导论(第二版)C和C++代码精粹C++沉思录C++必知必会C++程序调试实用手册C++面向对象多线程编程高质量C++编程指南深度探索c++对象模型侯捷译设计模式:可复用面向对象软件的基础中文高清PDF版C++精髓软件工程方法C++技术参考手册C++游戏编程C++高级编程C++编程:数据结构与程序设计方法数据结构C++语言描述应用标准摸板库STL(第2版)现代程序设计——C++与数据结构面向对象的方法与实现C++高级参考手册大规模C++程序设计C++语言的设计和演化C++标准程序库(前6章)C++ Templates全览中文版C++模板元编程中文PDF下载(C++ Template Metaprogramming)标准C++库函数参考The Annotated C++ Reference ManualC++多范型设计COM实例编程C++ STL程序员开发指南PDF下载C++ STL开发技术导引STL源码剖析泛型编程与STLEffective STL 中文版C++ STL程序员开发指南C++模板技术大全C++语言的设计和演化中文PDF版数据结构各种算法实现(C++模板)数据结构、算法与应用:C++语言描述Absolute C++, 4th EditionSams C++ UnleashedEffective C++, 3rd EdtitionO'Reilly C++ In a Nutshell Exceptional C++ StyleMore Exceptional C++C++ Coding StandardsInside the C++ Object ModelMore Exceptional C++Exceptional C++Cross-Platform Development in C++Practical C++ ProgrammingC++ GUI Programming with Qt 4C++ Coding Standards 101 Rules GuidelinesC++ Template MetaprogrammingC++ Standard Library - A Tutorial and ReferenceProfessional Multicore ProgrammingAccelerated C++ - Practical Programming by Example2005年度最经典C++教程8本打包下载C编程语言学习百宝箱(C Programming Language):C语言上机南开100题(2006年终结修订word版+ txt分类版)C语言程序设计:现代方法(第2版)中文版C语言程序设计:现代方法中文版C程序设计语言(第2版·新版) 文字版+书签| C程序设计语言(第2版·新版) 习题解答C程序设计(第三版) 谭浩强著谭浩强C语言程序设计教程全书Word版C大学教程(第五版)中文版PDF下载C Primer Plus(第五版)中文版北京大学C语言程序设计学习大全Word版全1045页C语言程序设计教程——基于Visual C++6.0环境你必须知道的495个C语言问题(C Programming FAQs)C语言实例解析精粹C专家编程C和指针C陷阱与缺陷ANSI C语言规范C语言编程第三版计算机图形学C语言版经典C程序100例GCC 权威指南第二版O'Reilly C Pocket ReferenceThe C Programming LanguageThe C Programming Language Special EditionThe Standard C Library (Djvu格式)Practical C ProgrammingC Primer PlusC Pocket ReferenceC Traps and PitfallsPhysics for Games ProgrammersC/C++名师视频大汇总:C语言程序设计视频教程吉林大学康辉48讲石油大学C语言程序设计视频教程曾怡主讲全33讲吉林大学C语言视频教程全51集CSF格式C语言基础视频教程全14讲完整上架C语言程序设计视频教程曾怡教授讲解全28讲完整版下载C++语言视频教程全51讲C++程序设计视频教程东南大学何洁月主讲全80讲(下) 32讲C++程序设计视频教程东南大学何洁月主讲全80讲(上) 48讲中山大学黎培兴C++语言视频教程全51讲完整版精品推荐数据结构C语言版视频教程全52讲完整版孙鑫C++视频教程rmvb格式全20CD完整版精品分享C++视频教程边用边学Visual C++ 6 (ASF格式)VC++面向对象与可视化程序设计视频教程编程经典C++ Builder视频教程全26讲avi格式下载另外,网络最强CASE工具+ 经典UML学习电子资下载汇总,软件设计与开发人员必备开源拓荒者整理的:C/C++书籍、网页、文档、资料。
侯捷老师的C++课程内容非常丰富,涵盖了C++的基础知识、面向对象编程、STL标准库和泛型编程、设计模式、新标准C++11&14、内存管理机制等多个方面。
具体来说,侯捷老师的C++课程包括:
1.C++编程简介:介绍C++的基本语法和编程思想,包括变量、数据类型、运算符、
控制结构等。
2.面向对象编程:介绍面向对象的基本概念和C++中的类、对象、继承、多态等
概念,以及如何使用面向对象的方法进行程序设计。
3.STL标准库和泛型编程:介绍STL标准库中的容器、算法、迭代器等,以及泛
型编程的概念和实现方法。
4.设计模式:介绍常见的面向对象设计模式,如单例模式、工厂模式、观察者模
式等,以及如何使用设计模式来提高代码的可维护性和可重用性。
5.新标准C++11&14:介绍C++11和C++14的新特性,如智能指针、lambda
表达式、范围for循环等,以及如何使用这些新特性来提高代码的效率和可读性。
6.内存管理机制:介绍C++中的内存管理机制,包括动态内存分配、内存泄漏检
测、垃圾回收等,以及如何避免内存泄漏和优化内存使用。
此外,侯捷老师的C++课程还包括一些进阶内容,如多线程编程、网络编程等,以及一些实用的编程技巧和经验分享。
总的来说,侯捷老师的C++课程内容非常全面,从基础到进阶,从理论到实践,涵盖了C++编程的各个方面。
通过学习侯捷老师的C++课程,可以深入了解C++编程语言的特点和应用,提高编程能力和水平。
STL之父访谈录
孟岩
【期刊名称】《程序员》
【年(卷),期】2001(000)002
【摘要】Dr.Dobb’s Journal特约记者,著名技术书籍作家Al Stevens采访
了STL创始人Alexander Stepanov。
这份访谈记录是迄今为止对于STL发展历
史的最完备介绍。
侯捷先生在他的STL有关文章里推荐大家阅读这篇文章。
【总页数】7页(P38-44)
【作者】孟岩
【作者单位】无
【正文语种】中文
【中图分类】TP311
【相关文献】
1.盐藻素,天生非等闲——中国“盐藻素之父”徐贵义教授访谈录 [J], 王林强;凌学江;
2.我的目标永远是让人开怀Perl之父LarryWall访谈录 [J], 卢鸫翔;王江平;
3.C++之父Bjarne Stroustrup访谈录 [J], 高博;吴天明;周梦伊;
4.PHP之父访谈录(上) [J], 邱海峰(译)
5.过去和未来、网络和现实的交接点——赛博朋克运动之父威廉·吉布森访谈录 [J], 鞠海彦
因版权原因,仅展示原文概要,查看原文内容请购买。
红黑树的插入、删除及旋转原则Category: Uncategorized— wuxicn @ 12:29 AM红黑树(Red-Black Tree)的插入和删除操作很繁琐,一不小心就容易弄错,不能靠强制记忆。
因此,今天总结一下红黑树插入和删除操作的推导原则,包括旋转的推导原则。
本文所有内容来自三个网页1./c?m=9d78d513d9d446db4fece4690a62c067691f97634d8b8d5068d4e20ace3f07070671e3ca617f0704a299213156b8492dacad21724 65377a09bb9db1b9bfcc17671c33034014ad11f45954ef9df01659f2fca1cafed0 ee6c9ed2fccfd8f8b840b009759127af7a0d50755448d2ee71446b2fbc6554b024 5fbf03161fb5b7122952957b630a3a66d30&p=8f36da5986cc46aa19be9b7a7f0a &user=baidu2.http://icoder.me/2009/08/25/insert-delete-in-red-black-tree/3./20065562/blog/item/93b2d17fd6f391320dd7da44.html如果大家能打开上面的链接,就不用再看了,我整理得不好。
先是比较简单的插入操作的推导原则:1. 红黑树的插入和普通搜索二叉树(Binary Search Tree)的插入一样,只是在插入完以后,将新插入的节点标记为红色,然后从该节点开始,向上进行调整颜色。
2. 向上调整颜色进行旋转时,旋转的原则是尽量用1次或者最多2次旋转完成,并且旋转操作不能影响该层以下层次的节点,只能影响其父节点,然后将其父节点(或者叔节点、兄弟节点)作为新的要调整颜色节点,继续向上递推调整。
侯捷觀點(系列書評 2/2)【Genericity/STL 大系】《程序員》2001.02 作者簡介:侯捷,臺灣電腦技術作家,著譯評兼擅。
常著文章自娛,頗示己志。
個人網站:北京鏡站:/expert/jjhou如果有一項技術,可以讓你的程式碼處理各種不同的資料型別,甚至是目前未知的資料型別,你喜歡嗎?我會欣喜若狂。
基本上這就是「可復用性(reusibility)」的表現。
當我們有新的資料型態產生,而過去完成的碼完全無需修改即可沿用,不正是一種完美的「可復用性」嗎?物件導向技術中的多型(polymorphism),以及泛型技術中的泛型(genericity)都可以達到這個目標。
它們的字義,也明白標示出其特色。
對大多數人而言,polymorphism(多型技術)早已如雷灌耳,genericity(泛型技術)則稍感陌生。
這是一個你有必要儘快進入的重要領域。
●勤前教育數年前我第一次接觸泛型程式設計(generic programming)與 STL(Standard Template Library)的時候,就深深被它吸引。
雖然那時候我還不怎麼瞭解 STL 裡頭一大堆的術語像是 container、iterator、adaptor、function object、allocator…。
甚至連泛型技術深度依賴的基本技法 C++ template,當時的我都還只一知半解,但光只「泛型」這兩個字就夠把我吸引到那個世界裡面了。
但願我這麼說不至於誤導你把泛型程式設計和 STL 劃上等號。
泛型概念濫觴於Doug McIlroy 於 1968 年發表的一篇著名論文 "Mass Produced Software Components",那篇論文提出了 "reusable components"(可復用軟體組件,又稱為軟體積木或軟體 IC)的願景。
過去數十年中,泛型技術仍屬於研究單位中的驕客,實作產品付之闕如。
直到 C++ 不斷加強 template 機制,並將Alexander Stepanov 創作的 STL 納入標準,泛型技術才終於在標準資料結構和標準演算法領域中有一套可被大眾運用的實作品出現,向現實跨一大步。
讓我們先複習一下。
下面是多型的標準形式:void func(Shape* ps) // Shape 是某個class 繼承體系的基礎類別{// ...ps->draw(); // draw() 是個虛擬函式(virtual function)}func() 的呼叫者可以自由傳入 Shape 繼承體系下任何一個 Shape 衍生類別的物件指標,func() 函式所喚起的將是實際傳入之物件(指標)所對應的那個draw() 虛擬函式。
這種寫法所帶來的好處是,即使將來 Shape 繼承體系衍生出前所未見的子型別,只要該子型別本身提供了 draw() 虛擬函式,上面這個func() 就完全不必更改,可繼續使用。
那麼,泛型又是什麼呢?簡單地說,這是一種「將資料型別參數化」的思維模式。
C++ 的 template 機制就是泛型技術的一個具體載具。
在 C++ 中,不論functions 或是 classes,皆可將其中所需要的資料型別以一個保留器(placeholder)代表,這個保留器亦即所謂的template 參數。
例如 function template:template<typename T1, typename T2)void func(T1 param1, T2 param2) { /* ... */ }或是 class template:template<typename T1, typename T2)class A { /* ... */ }從此,一旦程式中使用上述的 func() 或 class A,例如:func(5, 2.3);A<int, double> a;編譯器即根據 function template 的函式引數(上例的 5 和 2.3),或根據被我們明白標示出來的 class template 引數(上例的 int 和 double),自動推導出一份 function 實體或 class 實體。
這個所謂的具現化動作(instantiation)在編譯期就完成,不會增加執行期的成本。
關於 template 的詳細語法與性能,請參考任何一本完備的 C++ 百科型書籍。
以上這種「將資料型別參數化,再由編譯器視使用當時的情況,為我們完成實體具現化」的概念,即是泛型的實際展現。
template 是 C++ 語言中支援泛型概念的一個工具,而 STL 則是泛型概念的一套實作品。
從學理上來說,STL 其實是一套嚴謹的 "concepts" 分類學。
這裡所謂的concepts有其嚴謹定義,意指「對某種型別的某些條件需求」。
滿足這些條件之型別,稱為該concept的一個model。
舉個例子,如果我們能夠複製型別為 T 之物件,並可以將數值指派給 T 型別的變數身上,那麼型別 T 便符合Assignable這一concept,而 T 便是Assignable的一個model。
STL 的六大組件 containers, algorithms, iterators, function objects, allocators, adaptors, 全都是concepts,實作品如 vector, list, sort(), swap() 等等 templates, ... 全都是model s。
這樣的學理概念,對大部份人勿寧是不可承受之重。
大部份人只著眼 STL 的實用性,因為 STL 非常好用,彈性非常大,執行效率也很理想,可大幅提昇軟體開發效率。
從實作的角度來看,以各種方式完成,符合 STL concepts 需求之各種 C++ classes 和 C++ functions,就是大家一般印象中的 STL,它們實際存在於各個相應的含入檔中,如 <vector>,<functional>, <algorithms>.●剖析 STL任何學習,如果直接從抽象思維開始,對大部份人是一件困難的工作。
通常我們需要一個具體可操作的東西,慢慢再由具象操作轉為抽象思考。
那麼,先學會使用 STL,應該是學習泛型思維的最好途徑。
事實上,自從 STL 以及整個 C++ 標準程式庫定案之後,很多專家,包括 Bjarne Stroustrup,都認為 C++ 程式語言的教學,首先應從如何使用標準程式庫(含 STL)開始。
我當然無法在這篇文章中告訴你 STL 乃至整個標準程式庫的用法。
但是我可以給你一些概念,讓你知道 STL 的架構。
STL 是一個完全以 template 技術完成的程式庫。
它構成了 C++ 標準程式庫的絕大部份骨幹—粗略估計應該佔 80% 以上的面積。
STL 有六大組件(components):1 containers(容器),各種基本資料結構如 vector, list, deque, set, map…,共約 11 種。
其中有些亦被歸類為 adaptors。
2 algorithms(演算法),各種基本演算法如 sort, search, copy, erase…,共約 70 個。
3 iterators(迭代器):應用於容器與演算法身上的一種泛型指標,扮演兩者間的膠著劑。
[Gamma95]對於 iterator 這種設計樣式(design pattern)的定義是:提供一種方法,俾得依序巡訪某個聚合物件(容器)所含的各個元素,而又不需曝露該聚合物件的內部表述方式。
STL 共提供了五種 iterators 型態,以及各種衍生變化。
Iterator 是 STL 中最重要最抽象的一個組件,它使容器與演算法可以各自獨立發展,這是一種突破性的觀念。
不論就實作技術或抽象觀念,iterator 都是 STL 中最關鍵的成份。
瞭解了 iterators,也就進入了 STL 的大門。
4 function object:行為類似 function,但其實是一種 object。
以實作技術而言,這是一個改寫了 "call operator" 的 class。
STL 提供 15 個現成的function objects。
5 adaptors(調適器):用來改變(修飾)其他組件的介面。
[Gamma95]對於adaptor 這種設計樣式(design pattern)的定義是:將一個 class 的介面轉換為另一個 class 的介面,使原本因介面不相容而不能合作的 classes,可以一起運作。
在 STL 中,改變 function object 介面者,稱為 function adaptor,改變 container 介面者,稱為 container adaptor。
改變 iterator 介面者,稱為 iterator adaptor。
例如 STL 提供的兩個容器 queue 和 stack,其實都只不過是 adaptor,修飾了 deque 的介面而成就出另一種容器風貌。
6 allocator(記憶體配置器):容器空間配置系統。
STL 提供有現成的allocator。
下面這個例子,用上了 STL 的所有六種組件,目的是找出某個數列之中數值大於 40 的元素個數,答案為 4。
從這個例子,你可以看到 STL 不同組件間的接合,發展到了一個怎樣靈活的程度,像樂高積木一樣,有無限可能。
#include <algorithm>#include <functional>#include <vector>#include <iostream>using namespace std;int main(){int ia[ ] = { 27, 210, 12, 47, 109, 83, 40 };vector<int, allocator<int> > vec( ia, ia+7 );cout << count_if(vec.begin(), vec.end(),not1(bind2nd(less_equal<int>(), 40)));return 0;}// vector 是一個STL 容器// count_if 是一個STL 演算法// not1 和bind2nd 都是STL function adaptors// less_equal<> 是一個STL function object// allocator<> 是一個STL 記憶體配置器// vec.begin() 和vec.end() 分別傳回兩個iterator,指向容器vec 的頭尾。