• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            STL(Standard Template Library),即標準模板庫,是一個具有工業強度的,高效的C++程序庫。它被容納于C++標準程序庫(C++ Standard Library)中,是ANSI/ISO C++標準中最新的也是極具革命性的一部分。該庫包含了諸多在計算機科學領域里所常用的基本數據結構基本算法。
            有些類似于Microsoft Visual C++中的MFC(Microsoft Foundation Class Library),或者是Borland C++ Builder中的VCL(Visual Component Library)

            從邏輯層次來看,在STL中體現了泛型化程序設計的思想(generic programming),引入了諸多新的名詞,比如像需求(requirements),概念(concept),模型(model),容器(container),算法(algorithmn),迭代子(iterator)等。與OOP(object-oriented programming)中的多態(polymorphism)一樣,泛型也是一種軟件的復用技術。
            從實現層次看,整個STL是以一種類型參數化(type parameterized)的方式實現的,這種方式基于一個在早先C++標準中沒有出現的語言特性--模板(template)。如果查閱任何一個版本的STL源代碼,你就會發現,模板作為構成整個STL的基石是一件千真萬確的事情。
            在STL的源代碼里,并沒有太多太復雜的繼承關系。繼承的思想,甚而面向對象的思想,還不足以實現類似STL這樣的泛型庫。C++只有在引入了"模板"之后,才直接導致了STL的誕生。這也正是為什么,用其他比C++更純的面向對象語言無法實現泛型思想的一個重要原因。當然,事情總是在變化之中,像Java在這方面,就是一個很好的例子,jdk1.4中已經加入了泛型的特性。
            1.3.2 STL和C++標準函數庫

              STL是最新的C++標準函數庫中的一個子集,這個龐大的子集占據了整個庫的大約80%的分量。而作為在實現STL過程中扮演關鍵角色的模板則充斥了幾乎整個C++標準函數庫。
            它大致包含了如下幾個組件:
            C標準函數庫,基本保持了與原有C語言程序庫的良好兼容,盡管有些微變化。人們總會忍不住留戀過去的美好歲月,如果你曾經是一個C程序員,對這一點一定體會頗深。或許有一點會讓你覺得奇怪,那就是在C++標準庫中存在兩套C的函數庫,一套是帶有.h擴展名的(比如<stdio.h>),而另一套則沒有(比如<cstdio>)。它們確實沒有太大的不同。
            診斷(diagnostics)部分,提供了用于程序診斷和報錯的功能,包含了異常處理(exception handling),斷言(assertions),錯誤代碼(error number codes)三種方式。

              通用工具(general utilities)部分,這部分內容為C++標準庫的其他部分提供支持,當然你也可以在自己的程序中調用相應功能。比如:動態內存管理工具,日期/時間處理工具。記住,這里的內容也已經被泛化了(即采用了模板機制)。

              字符串(string)部分,用來代表和處理文本。它提供了足夠豐富的功能。事實上,文本是一個string對象,它可以被看作是一個字符序列,字符類型可能是char,或者wchar_t等等。string可以被轉換成char*類型,這樣便可以和以前所寫的C/C++代碼和平共處了。因為那時侯除了char*,沒有別的。

              國際化(internationalization)部分,作為OOP特性之一的封裝機制在這里扮演著消除文化和地域差異的角色,采用locale和facet可以為程序提供眾多國際化支持,包括對各種字符集的支持,日期和時間的表示,數值和貨幣的處理等等。畢竟,在中國和在美國,人們表示日期的習慣是不同的。

              容器(containers)部分,STL的一個重要組成部分,涵蓋了許多數據結構,比如前面曾經提到的鏈表,還有:vector(類似于大小可動態增加的數組)、queue(隊列)、stack(堆棧)……。string也可以看作是一個容器,適用于容器的方法同樣也適用于string。現在你可以輕松的完成數據結構課程的家庭作業了。

              算法(algorithms)部分,STL的一個重要組成部分,包含了大約70個通用算法,用于操控各種容器,同時也可以操控內建數組。比如:find用于在容器中查找等于某個特定值的元素,for_each用于將某個函數應用到容器中的各個元素上,sort用于對容器中的元素排序。所有這些操作都是在保證執行效率的前提下進行的,所以,如果在你使用了這些算法之后程序變得效率底下,首先一定不要懷疑這些算法本身,仔細檢查一下程序的其他地方。

              迭代器(iterators)部分,STL的一個重要組成部分,如果沒有迭代器的撮合,容器和算法便無法結合的如此完美。事實上,每個容器都有自己的迭代器,只有容器自己才知道如何訪問自己的元素。它有點像指針,算法通過迭代器來定位和操控容器中的元素。

              數值(numerics)部分,包含了一些數學運算功能,提供了復數運算的支持。

              輸入/輸出(input/output)部分,就是經過模板化了的原有標準庫中的iostream部分,它提供了對C++程序輸入輸出的基本支持。在功能上保持了與原有iostream的兼容,并且增加了異常處理的機制,并支持國際化(internationalization)。

              總體上,在C++標準函數庫中,STL主要包含了容器、算法、迭代器。string也可以算做是STL的一部分。



            圖1:STL和C++標準函數庫
            Posted on 2006-01-01 12:13 艾凡赫 閱讀(746) 評論(0)  編輯 收藏 引用 所屬分類: C++
            日韩乱码人妻无码中文字幕久久 | 久久五月精品中文字幕| 无码国产69精品久久久久网站| 国内精品久久久久久野外| 夜夜亚洲天天久久| 久久精品亚洲男人的天堂| 人妻精品久久无码专区精东影业| 欧美亚洲另类久久综合| 国产午夜电影久久| 欧美亚洲国产精品久久| 人妻无码αv中文字幕久久 | 91精品国产综合久久四虎久久无码一级| 精品久久久久久国产潘金莲| 久久久国产精品网站| 亚洲国产精品狼友中文久久久| 99久久精品毛片免费播放| 国产日韩久久久精品影院首页| 精品久久久久久成人AV| 成人a毛片久久免费播放| 国产精品久久久久久久app | 国产精品久久国产精品99盘| 国产精品久久久久久久久免费| 久久亚洲欧洲国产综合| 国产∨亚洲V天堂无码久久久| 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 丰满少妇高潮惨叫久久久| 久久AV高潮AV无码AV| 激情五月综合综合久久69| 国产成人精品久久| 亚洲色大成网站WWW久久九九| 亚洲AV无码久久精品蜜桃| 亚洲婷婷国产精品电影人久久| 超级97碰碰碰碰久久久久最新 | 中文字幕久久精品无码| 国产精品亚洲综合专区片高清久久久| 久久久久亚洲AV无码专区体验| 国产精品99久久99久久久| 亚洲精品乱码久久久久久| 久久综合国产乱子伦精品免费| 色婷婷综合久久久中文字幕| 伊人久久亚洲综合影院|