• <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 艾凡赫 閱讀(749) 評論(0)  編輯 收藏 引用 所屬分類: C++
            国产精品嫩草影院久久| 欧美亚洲国产精品久久久久| 国产三级久久久精品麻豆三级| 色欲av伊人久久大香线蕉影院 | 久久久久久久久久久久久久| 天天躁日日躁狠狠久久| 狠狠色伊人久久精品综合网| 久久久久人妻一区二区三区 | 亚洲午夜久久久久久久久电影网 | 伊人久久大香线蕉成人| 久久精品国产亚洲av麻豆小说| 久久精品国产福利国产琪琪 | 国产亚洲美女精品久久久| 午夜精品久久久久成人| 久久久久久久尹人综合网亚洲| 免费一级做a爰片久久毛片潮 | 久久精品国产亚洲精品2020| 久久精品国产亚洲av瑜伽| 久久99精品久久只有精品| 97香蕉久久夜色精品国产| 精品国产热久久久福利| 国产欧美久久一区二区| 久久精品中文字幕一区| 久久久久亚洲爆乳少妇无| 久久国产成人精品麻豆| 国产A级毛片久久久精品毛片| 久久97久久97精品免视看| 国产亚洲欧美成人久久片| 精品国产乱码久久久久久1区2区 | 噜噜噜色噜噜噜久久| 久久免费视频一区| 99久久免费只有精品国产| 久久精品免费一区二区三区| 久久免费视频网站| av无码久久久久不卡免费网站| 亚洲∧v久久久无码精品| 无遮挡粉嫩小泬久久久久久久| 久久九九兔免费精品6| 无码人妻久久一区二区三区免费丨 | 久久国产精品视频| 国产国产成人久久精品|