首页 STL源码剖析_简体.pdf

STL源码剖析_简体.pdf

STL源码剖析_简体.pdf

上传者: bpingchang 2011-03-25 评分1 评论0 下载638 收藏0 阅读量1424 暂无简介 简介 举报

简介:本文档为《STL源码剖析_简体pdf》,可适用于IT书籍领域,主题内容包含TheAnnotatedSTLSource无限延伸你的视野STL源码剖析侯捷庖丁解牛恢恢乎游刃有余STL源码剖析TheAnnotatedSTLSou符等。

TheAnnotatedSTLSource无限延伸你的视野STL源码剖析侯捷庖丁解牛恢恢乎游刃有余STL源码剖析TheAnnotatedSTLSource(usingSGISTL)侯捷峰碁峰脑图书数据股份有限公司SGISTL源码剖析TheAnnotatedSTLSources向专家学习强型检验、内存管理、算法、数据结构、及STL各类组件之实作技术侯捷着源码之前了无秘密献给每一位对GPSTL有所渴望的人天下大事必作于细–侯捷–TheAnnotatedSTLSources庖丁解牛侯捷自序i庖丁解牛侯捷自序这本书的写作动机纯属偶然。年下半我开始为计划中的《泛型思维》一书陆续准备并热身。为了对泛型编程技术以及STL实作技术有更深的体会以便在讲述整个STL的架构与应用时更能虎虎生风我常常深入到STL源码去刨根究底。的某一天我突然有所感触:既然花了大把精力看过STL源码写了眉批做了整理何不把它再加一点功夫形成一个更完善的面貌后出版?对我个人而言一份批注详尽的STL源码价值不扉如果我从中获益一定也有许多能够从中获益。这样的念头使我极度兴奋。剖析大架构本是侯捷的拿手这个主题又可以和《泛型思维》相呼应。于是我便一头栽进去了。我选择SGISTL作为剖析对象。这份实作版本的可读性极佳运用极广被选为GNUC的标准链接库又开放自由运用。愈是细读SGISTL源码愈令我震惊抽象思考层次的落实、泛型编程的奥妙、及其效率考虑的绵密。不仅最为人广泛运用的各种数据结构(datastructures)和算法(algorithms)在STL中有良好的实现连内存配置与管理也都重重考虑了最佳效能。一切的一切除了实现软件积木的高度复用性让各种组件(components)得以灵活搭配运用更考虑了实用上的关键议题:效率。庄子养生主:「彼节间有间而刀刃者无厚以无厚入有间恢恢乎其于游刃必有余矣。」侯捷不让以此自况。TheAnnotatedSTLSourcesiiSTL源码剖析这本书不适合C初学者不适合Genericity(泛型技术)初学者或STL初学者。这本书也不适合带领你学习面向对象(ObjectOriented)技术是的STL与面向对象没有太多关连。本书前言清楚说明了书籍的定位和合适的读者以及各类基础读物。如果你的GenericProgrammingSTL实力足以阅读本书所呈现的源码那么恭喜你踏了基度山岛这儿有座大宝库等着你。源码之前了无秘密你将看到vector的实作、list的实作、heap的实作、deque的实作、RBtree的实作、hashtable的实作、setmap的实作你将看到各种算法(排序、搜寻、排列组合、数据搬移与复制…)的实作你甚至将看到底层的memorypool和高阶抽象的traits机制的实作。那些数据结构、那些算法、那些重要观念、那些编程实务最重要最根本的珍宝那些蜇伏已久彷佛已经还给老师的记忆将重新在你的脑闪闪发光。们常说不要从轮子重新造起要站在巨的肩膀。面对扮演轮子角色的这些STL组件我们是否有必要深究其设计原理或实作细节呢?答案因而异。从应用的角度思考你不需要探索实作细节(然而相当程度认识底层实作对实务运用有绝对的帮助)。从技术研究与本质提升的角度看深究细节可以让你彻底掌握切不论是为了重温数据结构和算法或是想要扮演轮子角色或是想要进步扩张别的轮子都可因此获得深厚扎实的基础。大事必作于细!但是别忘了参观飞机工厂不能让你学得流体力学也不能让你学会开飞机。然而如果你会开飞机又懂流体力学参观飞机工厂可以带给你最大的乐趣和价值。TheAnnotatedSTLSources庖解牛y侯捷自序iii我开玩笑对朋友说这本书出版给大学课程的「数据结构」和「算法」两门授课老师出了个难题。几乎所有可能的作业题目(复杂度证明题除外)本书都有了详尽的解答。然而如果学生能够从庞大的SGISTL源码干净抽出某部份加自己的包装做为呈堂作业也足以证明你有资格获得学分和高分。事实追踪流作品并于其吸取养份远比自己关起门来写个流作品价值高得多我的确认为的程序员所写的程序在SGISTL面前都是流水平。侯捷新竹台湾http:wwwjjhoucom(繁体)http:jjhoucsdnnet(简体)jjhoujjhoucomps以书互有定位互有关联彼此亦相呼应。为了不重复讲述相同的内容我会在适当时候提醒读者在哪本书获得更多数据:z《多型与虚拟》内容涵括:C语法、语意、对象模型面向对象精神小型framework实作OOP专家经验设计样式(designpatterns)导入。z《泛型思维》内容涵括:语言层次(Ctemplates语法、Javageneric语法、C运算符重载)STL原理介绍与架构分析STL现场重建STL深度应用STL扩充示范泛型思考。z《STL源码剖析》内容涵括:STL所有组件之实作技术和其背后原理解说。TheAnnotatedSTLSourcesivSTL源码剖析TheAnnotatedSTLSources目录v目录庖解牛(侯捷自序)i目录v前言xvii本书定位xvii合适的读者xviii最佳阅读方式xviii我所选择的剖析对象xix各章主题xx编译工具xx英术语的运用风格xxi英文术语采用原则xxii版面字形风格xxiii源码形式与载xxiv线服务xxvi推荐读物xxvi第章STL概论与版本简介STL概论STL的历史STL与C标准链接库TheAnnotatedSTLSourcesviSTL源码剖析STL六大组件功能与运用GNU源码开放精神HPSTL实作版本PJPlaugerSTL实作版本RougeWaveSTL实作版本STLport实作版本SGISTL实作版本总览GNUCheader档案分布SGISTL档案分布与简介STL标准表头档(无扩展名)C标准规格定案前HP规范的STL表头档(扩展名h)SGISTL内部档案(SGISTL真正实作于此)SGISTL的组态设定(configuration)可能令你困惑的C语法stlconfigh的各种组态组态:statictemplatemember组态:classtemplatepartialspecialization组态:functiontemplatepartialorder组态:explicitfunctiontemplatearguments组态:membertemplates组态:defaulttemplateargumentdependonprevioustemplateparameters组态:nontypetemplateparameters组态:boundfriendtemplatefunction组态:classtemplateexplicitspecialization暂时对象的产生与运用静态常数整数成员在class内部直接初始化inclassstaticconstintegraldatamemberinitializationTheAnnotatedSTLSources目录viiincrementdecrementdereference运算符「前闭后开」区间表示法)functioncall运算符(operator())第章空间配置器(allocator)空间配置器的标准接口设计个阳春的空间配置器JJ::allocator具备次配置力(suballocation)的SGI空间配置器SGI标准的空间配置器std::allocatorSGI特殊的空间配置器std::alloc建构和解构基本工具:construct()和destroy()空间的配置与释放std::alloc第级配置器mallocalloctemplate剖析第级配置器defaultalloctemplate剖析空间配置函式allocate()空间释放函式deallocate()重新充填freelists记忆池(memorypool)内存基本处理工具uninitializedcopyuninitializedfilluninitializedfilln第章迭代器(iterators)概念与traits编程技法迭代器设计思维STL关键所在迭代器是种smartpointer迭代器相应型别(associatedtypes)Traits编程技法STL源码门钥TheAnnotatedSTLSourcesviiiSTL源码剖析PartialSpecialzation(偏特化)的意义迭代器相应型别之valuetype迭代器相应型别之differencetype迭代器相应型别之pointertype迭代器相应型别之referencetype迭代器相应型别之五iteratorcategorystd::iteratorclass的保证iterator相关源码整理重列SGISTL的私房菜:typetraits第章序列式容器(sequencecontainers)容器概观与分类序列式容器(sequencecontainers)vectorvector概述vector定义式摘要vector的迭代器vector的数据结构vector的建构与内存管理:constructor,pushbackvector的元素操作:popback,erase,clear,insertlistlist概述list的节点(node)list的迭代器list的数据结构list的建构与内存管理:constructor,pushback,insertlist的元素操作:pushfront,pushback,erase,popfront,popback,clear,remove,unique,splice,merge,reverse,sortTheAnnotatedSTLSources目录ixdequedeque概述deque的控器deque的迭代器deque的数据结构deque的建构与内存管理:ctor,pushback,pushfrontdeque的元素操作:popback,popfront,clear,erase,insertstackstack概述stack定义式完整列表stack没有迭代器以list做为stack的底层容器queuequeue概述queue定义式完整列表queue没有迭代器以list做为queue的底层容器heap(隐性表述implicitrepresentation)heap概述heap算法pushheappopheapsortheapmakeheapheap没有迭代器heap测试实例priorityqueueTheAnnotatedSTLSourcesxSTL源码剖析priorityqueue概述priorityqueue定义式完整列表priorityqueue没有迭代器priorityqueue测试实例slistslist概述slist的节点slist的迭代器slist的数据结构slist的元素操作第章关系型容器(associatedcontainers)树的导览元搜索树(binarysearchtree)平衡元搜索树(balancedbinarysearchtree)AVLtree(AdelsonVelskiiLandistree)单旋转(SingleRotation)双旋转(DoubleRotation)RBtree(红黑树)安插节点个由而的程序RBtree的节点设计RBtree的迭代器RBtree的数据结构RBtree的建构与内存管理RBtree的元素操作元素安插动作insertequal元素安插动作insertuniqueTheAnnotatedSTLSources目录xi真正的安插执行程序insert调整RBtree(旋转及改变颜色)元素的搜寻findsetmapmultisetmultimaphashtablehashtable概述hashtable的桶子(buckets)与节点(nodes)hashtable的迭代器hashtable的数据结构hashtable的建构与内存管理安插动作(insert)与表格重整(resize)判知元素的落脚处(bktnum)复制(copyfrom)和整体删除(clear)hashtable运用实例(find,count)hashfunctionshashsethashmaphashmultisethashmultimap第章算法(algorithms)算法概观算法分析与复杂度表示O()STL算法总览mutatingalgorithms会改变操作对象之值TheAnnotatedSTLSourcesxiiSTL源码剖析nonmutatingalgorithms不改变操作对象之值STL算法的般型式算法的泛化过程数值算法<stlnumerich>运用实例accumulateadjacentdifferenceinnerproductpartialsumpoweritoa基本算法<stlalgobaseh>运用实例equalfillfillniterswaplexicographicalcomparemax,minmismatchswapcopy强化效率无所不用其极copybackwardSet相关算法(应用于已序区间)setunionsetintersectionsetdifferencesetsymmetricdifferenceheap算法:makeheap,popheap,pushheap,sortheap其他算法TheAnnotatedSTLSources目录xiii单纯的数据处理adjacentfindcountcountiffindfindiffindendfindfirstofforeachgenerategeneratenincludes(应用于已序区间)maxelementmerge(应用于已序区间)minelementpartitionremoveremovecopyremoveifremovecopyifreplacereplacecopyreplaceifreplacecopyifreversereversecopyrotaterotatecopysearchsearchnswaprangestransformuniqueuniquecopylowerbound(应用于已序区间)upperbound(应用于已序区间)binarysearch(应用于已序区间)nextpermutationprevpermutationrandomshuffleTheAnnotatedSTLSourcesxivSTL源码剖析partialsortpartialsortcopysortequalrange(应用于已序区间)inplacemerge(应用于已序区间)nthelementmergesort第章仿函式(functor另名函式物件functionobjects)仿函式(functor)概观可配接(adaptable)的关键unaryfunctionbinaryfunction算术类(Arithmetic)仿函式plus,minus,multiplies,divides,modulus,negate,identityelement相对关系类(Relational)仿函式equalto,notequalto,greater,greaterequal,less,lessequal逻辑运算类(Logical)仿函式logicaland,logicalor,logicalnot证同(identity)、选择(select)、投射(project)identity,selectst,selectnd,projectst,projectnd第章配接器(adapter)配接器之概观与分类应用于容器containeradapters应用于迭代器iteratoradapters运用实例应用于仿函式functoradapters运用实例TheAnnotatedSTLSourcescontaineradaptersstackqueueiteratoradaptersinsertiteratorsreverseiteratorsstreamiterators(istreamiterator,ostreamiterator)functionadapters對參數進行繫結(綁定):bindst,bindnd用於函式合成:compose,compose(未納入標準)用於函式指標:ptrfun用於成員函式指標:memfun,memfunref附錄A參考資料與推薦讀物(Bibliography)附錄B侯捷網站簡介附錄CSTLport的移植經驗(by孟岩)索引目录xv对传回值进行逻辑否定:not,notTheAnnotatedSTLSourcesxviSTL源码剖析TheAnnotatedSTLSources前言xvii前言本书定位C标准链接库是个伟大的作品。它的出现相当程度改变了C程序的风貌以及学习模式。纳入STL(StandardTemplateLibrary)的同时标准链接库的所有组件包括大家早已熟悉的string、stream等等亦全部以template改写过。整个标准链接库没有太多的OO(ObjectOriented)倒是无处不存在GP(GenericProgramming)。C标准链接库隶属STL范围者粗估当在以。对软件开发而言STL是尖利兵可以节省你许多时间。对编程技术而言STL是金柜石室所有与编程工作最有直接密切关联的些最被广泛运用的数据结构和算法STL都有实作并符合最佳(或极佳)效率。不仅如此STL的设计思维把我们提升到另个思想高点在那里对象的耦合性(coupling)极低复用性(reusability)极高各种组件可以独立设计又可以灵活无罅结合在起。是的STL不仅仅是链接库它其实具备framework格局允许用户加自己的组件与之融合并用是个符合开放性封闭(OpenClosed)原则的链接库。从应用角度来说任何位C程序员都不应该舍弃现成、设计良好而又效率极佳的标准链接库却「入太庙每事问」事事物物从轮子造起那对组件技术及软件工程是大嘲讽。然而对于个想要深度钻研STL以便拥有扩充能力的请参考LearningStandardCasaNewLanguage,byBjarneStroustrup,CCUsersJournal。译文http:wwwjjhoucomprogrammerlearningstandardcpphtmTheAnnotatedSTLSourcesxviiiSTL源码剖析相当程度追踪STL源码是必要的功课。是的对于个想要充实数据结构与演算法等固有知识并提升泛型编程技法的「入太庙每事问」是必要的态度追踪STL源码则是提升功力的极佳路线。想要良好运用STL我建议你看《TheCStandardLibrary》byNicolaiMJosuttis想要严谨认识STL的整体架构和设计思维以及STL的详细规格我建议你看《GenericProgrammingandtheSTL》byMatthewHAustern想要从语法层面开始学理与应用得兼宏观与微观齐备我建议你看《泛型思维》by侯捷想要深入STL实作技法窥大家风范提升自己的编程功力我建议你看你手这本《STL源码剖析》事实就在笔此刻你也找不到任何本相同定位的书。合适的读者本书不适合STL初学者(当然更不适合C初学者)。本书不是面向对象(ObjectOriented)相关书籍。本书不适合用来学习STL的各种应用。对于那些希望深刻了解STL实作细节俾得以提升对STL的扩充能力或是希望藉由观察STL源码学习世界流程式员身手并藉此彻底了解各种被广泛运用之数据结构和算法的本书最适合你。最佳阅读方式无论你对STL认识了多少我都建议你第次阅读本书时采循序渐进方式遵循书安排的章节先行浏览遍。视个功力的深浅你可以或快或慢并依个兴趣或需要深入其。初次阅读最好循序渐进理由是举个例子所有容器(containers)的定义式开头都会出现空间配置器(allocator)的运用我可以在最初数次提醒你空间配置器于第章介绍过但我无法遍及全书再再提醒你。又例如源码之时而会出现些全局函数调用动作尤其是定义于<stlconstructh>之用于物件建构与解构的基本函式以及定义于TheCStandardTemplateLibrary,byPJPlauger,AlexanderAlStepanov,MengLee,DavidRMusser,PrenticeHall与本书定位相近但在表现方式大有不同。TheAnnotatedSTLSources前言xix<stluninitializedh>之用于记忆体管理的基本函式以及定义于<stlalgobaseh>之的各种基本算法。如果那些全局函式已经在先前章节介绍过我很难保证每次都提醒你那是种顾此失彼、苦不堪言的劳役并且容易造成阅读的累赘。我所选择的剖析对象本书名为《STL源码剖析》然而STL实作品百花齐放不论就技术面或可读性皆有高之分。选择份好的实作版本就学习而言当然是极为重要的。我选择的剖析对象是声名最着也是我个评价最高的个产品:SGI(SiliconGraphicsComputerSystems,Inc)版本。这份由STL之父AlexanderStepanov、经典书籍《GenericProgrammingandtheSTL》作者MatthewHAustern、STL耆宿DavidMusser等投注心力的STL实作版本不论在技术层次、源码组织、源码可读性均有卓越的表现。这份产品被纳为GNUC标准链接库任何皆可从网际网络载GNUC编译程序从而获得整份STL源码并获得自由运用的权力(详见节)。我所选用的是cygnusCforWindows版本。我并未刻意追求最新版本来书籍不可能永远呈现最新的软件版本软件更新永远比书籍改版快速来本书的根本目的在建立读者对于STL巨观架构和微观技术的掌握以及源码的阅读能力这种核心知识的形成与源码版本的关系不是那么唇齿相依来SGISTL实作品自从搭配GNUC以来已经十分稳固变异极微而我所选择的版本表现相当良好来这个版本的源码比后来的版本更容易阅读因为许多内部变量名称并不采用划线(underscore)划线在变数命名规范有其价值但到处都是划线则对大量阅读相当不利。网络有个STLport(http:wwwstlportorg)站点提供份以SGISTL为蓝本的高度可移植性实作版本。本书附录C列有孟岩先生所写的文章是份STLport移植到VisualC和CBuilder的经验谈。关于cygnus、GNU源码开放精神、以及自由软件基金会(FSF)请见节介绍。TheAnnotatedSTLSourcesxx各章主题STL源码剖析本书假设你对STL已有基本认识和某种程度的运用经验。因此除了第章略作介绍之外立刻深入STL技术核心并以STL六大组件(components)为章节之进行依据。以是各章名称这样的次序安排大抵可使每章所剖析的主题能够于先前章节获得充份的基础。当然技术之间的关连错综复杂不可能存在单纯的线性关系这样的安排也只能说是尽最大努力。第章STL概论与实作版本简介第章空间配置器(allocator)第章迭代器(iterators)概念与traits编程技法第章序列式容器(sequencecontainers)第章关系型容器(associatedcontainers)第章算法(algorithms)第章仿函式or函式物件(functors,orfunctionobjects)第章配接器(adapter)编译工具本书主要探索SGISTL源码并提供少量测试程序。如果测试程序只做标准的STL动作不涉及SGISTL实作细节那么我会在VC、CB、cygnusforWindows等编译平台分别测试它们。随着对SGISTL源码的掌握程度增加我们可以大胆做些练习将SGISTL内部接口打开或是修改某些STL组件加少量输出动作以观察组件的运作过程。这种情况操练的对象既然是SGISTL我也就只使用GNUC来编译。SGISTL事实是个高度可携产品不限使用于GNUC。从它对各种编译程序的环境组态设定(节)便可略知。网络有个STLport组织不遗余力将SGISTL移植到各种编译平台。请参阅本书附录C。TheAnnotatedSTLSources前言xxi中英术语的运用风格我曾经发表过篇《技术引导乎文化传承乎》的文章阐述我对专业计算机书籍的英术语运用态度。文章收录于侯捷网站http:wwwjjhoucomarticlehtm。以简单叙述我的想法。为了学术界和业界的习惯也为了与全球科技接轨并且也因为我所撰写的是供专业士阅读的书籍而非科普读物我决定适量保留专业领域被朗朗口的英文术语。朗朗口与否见仁见智我以个阅历做为抉择依据。做为个并非以英语为母语的族裔我们对英文的阅读困难并不在单字而在整句整段的文意。做为项技术的学习者我们的困难并不在术语本身(那只是个符号)而在术语背后的技术意义。熟悉并使用原文术语至为重要。原因很简单在科技领域里你必须与全世界接轨。文技术书籍的价值不在于「建立本国文化」或「让它成为本道的文书」或「完全扫除英汉字典的需要」。文技术书籍的重要价值在于引进技术、引导学习、扫平阅读障碍、增加学习效率。绝大部份我所采用的英文术语都是名词。但极少数动词或形容词也有必要让读者知道原文(我会时而英并列并使用斜体英文)原因是:zC编译程序的错误讯息并未文化万错误讯息出现以字眼:unresolved,instantiated,ambiguous,override而编写程序的你却不熟悉或不懂这些动词或形容词的技术意义就不妙了。z有些动作关系到libraryfunctions而libraryfunctions的名称并未文化例如insert,delete,sort。因此视状况而定我可能会选择使用英文。z如果某些术语关系到语言关键词为了让读者有最直接的感受与联想我会采用原文例如static,private,protected,public,friend,inline,extern。版面像一张破碎的脸?大量英夹杂的结果无法避免造成版面的「破碎」。但为了实现合宜的表达方TheAnnotatedSTLSourcesxxiiSTL源码剖析式牺牲版面的「全文化」在所难免。我将尽量以版面手法来达到视觉的顺畅换言之我将采用不同的字形来代表不同属性的术语。如果把英文术语视为种符号这些英夹杂但带有特殊字形的版面并不会比市面琳琅满目的许多应用软件图解使用手册来得突兀(而后者不是普遍为大众所喜爱吗)。我所采用的版面都已经过再试炼过去以来获得许多读者的赞同。英文术语采用原则就我的观察们对于英文词或文词的采用隐隐有个习惯:如果文词发音简短(或至少不比英文词繁长)并且意义良好那么就比较有可能被业界用于日常沟通否则业界多半采用英文词。例如polymorphism音节过多所以意义良好的文词「多型」就比较有机会被采用。例如虚拟函式的发音不比virtualfunction繁长所以使用这个文词的也不少。「多载」或「重载」的发音比overloaded短得多意义又正确用的也不少。但此并非绝对法则否则就不会有绝大多数工程师说datamember而不说「数据成员」、说memberfunction而不说「成员函式」的情况了。以是本书采用原文术语的几个简单原则。请注意并没有绝对的实践有时候要看文情况。同时容我再强调次这些都是基于我与业界和学界的接触经验而做的选择。z编程基础术语采用文。例如:函式、指针、变量、常数。本书的英文术语绝大部份都与COOPGP(GenericProgramming)相关。z简单而朗朗口的词视情况可能直接使用英文:input,output,lvalue,rvaluez读者有必要认识的英文名词不译:template,class,object,exception,scope,namespace。z长串、有特定意义、译名称拗口者不译:explicitspecialization,partialspecialization,usingdeclaration,usingdirective,exceptionspecialization。z运算符名称不译:copyassignment运算符memberaccess运算符arrow运算符dot运算符addressof运算符dereference运算符TheAnnotatedSTLSources前言xxiiiz业界惯用词不译:constructor,destructor,datamember,memberfunction,reference。z涉及C关键词者不译:public,private,protected,friend,static,z意义良好发音简短流传颇众的译词用之:多型(polymorphism)虚拟函式(virtualfunction)、泛型(genericity)…z译后可能失掉原味而无法完全彰显原味者英并列。z重要的动词、形容词时而英并列:模棱两可(ambiguous),决议(resolve),改写(override)自变量推导(argumentdeduced)具现化(instantiated)。zSTL专用术语:采用文如迭代器(iterator)、容器(container)、仿函式(functor)、配接器(adapter)、空间配置器(allocator)。z数据结构专用术语:尽量采用英文如vector,list,deque,queue,stack,set,map,heap,binarysearchtree,RBtree,AVLtree,priorityqueue援用英文词或不厌其烦英并列获得的项重要福利是:本书得以英文做为索引凭借。http:wwwjjhoucomtermstxt列有我个整理的份英繁简术语对照表。版面字型风格中文z本文:细明ptz标题:华康粗圆z视觉加强:华康中黑英文z般文字TimesNewRoman,pt例如:class,object,memberfunction,datamember,baseclass,derivedclass,private,protected,public,reference,template,namespace,functiontemplate,classtemplate,local,globalz动词或形容词TimesNewRoman斜体pt例如:resolve,ambiguous,override,instantiatedzclass名称LucidaConsolept例如:stack,list,mapz程序代码识别符号CourierNewpt例如:int,min(SmallInt*,int)TheAnnotatedSTLSourcesxxivSTL源码剖析z长串术语Arialpt例如:memberinitializationlist,namereturnvalue,usingdirective,usingdeclaration,passbyvalue,passbyreference,functiontryblock,exceptiondeclaration,exceptionspecification,stackunwinding,functionobject,classtemplatespecialization,classtemplatepartialspecialization…zexceptiontypes或iteratortypes或iostreammanipulatorsLucidaSanspt例如:badalloc,backinserter,boolalphaz运算符名称及某些特殊动作FootlightMTLightpt例如:copyassignment运算符dereference运算符addressof运算符equality运算子functioncall运算符constructor,destructor,defaultconstructor,copyconstructor,virtualdestructor,memberwiseassignment,memberwiseinitializationz程序代码CourierNewpt例如:#include<iostream>usingnamespacestd要在整本书维护贯的字形风格而没有任何疏漏很不容易许多时候不同类型的术语搭配起来就形成了不知该用哪种字形的困扰。排版者顾此失彼的可能也不是没有。因此请注意各种字形的运用只是为了让您阅读时有比较好的效果其本身并不具其他意义。局部的致性更重于全体的致性。源码形式与下载SGISTL虽然是可读性最高的份STL源码但其并没有对实作程序乃至于实作技巧有什么文字批注只偶而在档案最前面有点点总体说明。虽然其符号名称有不错的规划真要仔细追踪源码仍然旷日费时。因此本书不但在正文之解说其设计原则或实作技术也直接在源码加许多批注。这些批注皆以蓝色标示。条件式编译(#ifdef)视同源码处理函数调用动作以红色表示巢状定义亦以红色表示。classes名称、datamembers名称和memberfunctions名称大多以粗体表示。特别需要提醒的方(包括template预设自变量、长度很长的巢状式定义)则加灰阶底纹。例如:template<classT,classAlloc=alloc>默认使用alloc为配置器classvector{public:typedefTvaluetypeTheAnnotatedSTLSources前言xxvtypedefvaluetype*iteratorprotected:vector采用简单的线性连续空间。以两个迭代器start和end分别指向头尾并以迭代器endofstorage指向容量尾端。容量可能比(尾头)还大多余的空间即备用空间。iteratorstartiteratorfinishiteratorendofstoragevoidfillinitialize(sizetypen,constTvalue){start=allocateandfill(n,value)配置空间并设初值finish=startn调整水位endofstorage=finish调整水位}}#ifdefSTLFUNCTIONTMPLPARTIALORDERtemplate<classT,classAlloc>inlinevoidswap(vector<T,Alloc>x,vector<T,Alloc>y){xswap(y)}#endif*STLFUNCTIONTMPLPARTIALORDER*又如:以配接器用来表示某个AdaptableBinaryPredicate的逻辑负值template<classPredicate>classbinarynegate:publicbinaryfunction<typenamePredicate::firstargumenttype,typenamePredicate::secondargumenttype,bool>{}这些作法可能在某些方有少许例外(或遗漏)唯不变的原则就是尽量设法让读者眼抓住源码重点。花花绿绿的颜色乍见之或许不习惯多看几眼你就会喜欢它。这些经过批注的SGISTL源码以MicrosoftWord文件格式连同SGISTL源码置于侯捷网站供自由载。噢是的STL涵盖面积广大

职业精品

分销渠道选择.ppt

辞职申请书(优质范文).doc

公司年检申请书doc.doc

厂家和经销商代理合同.doc

用户评论

0/200
    暂无评论
上传我的资料

精彩专题

相关资料换一换

资料评价:

/ 261
所需积分:0 立即下载

意见
反馈

返回
顶部