青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

山寨:不是最好的,是最適合我們的!歡迎體驗山寨 中文版MSDN

Blog @ Blog

當華美的葉片落盡,生命的脈絡才歷歷可見。 -- 聶魯達

常用鏈接

統計

積分與排名

BBS

Blog

Web

最新評論

C++ STL簡介[轉]

一、STL簡介

STL(Standard Template Library,標準模板庫)是惠普實驗室開發的一系列軟件的統稱。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普實驗室工作時所開發出來的?,F在雖說它主要出現在C++中,但在被引入C++之前該技術就已經存在了很長的一段時間。

STL的代碼從廣義上講分為三類:algorithm(算法)、container(容器)iterator(迭代器,幾乎所有的代碼都采用了模板類和模版函數的方式,這相比于傳統的由函數和類組成的庫來說提供了更好的代碼重用機會。在C++標準中,STL被組織為下面的13個頭文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。以下筆者就簡單介紹一下STL各個部分的主要特點。

二、算法

大家都能取得的一個共識是函數庫對數據類型的選擇對其可重用性起著至關重要的作用。舉例來說,一個求方根的函數,在使用浮點數作為其參數類型的情況下的可重用性肯定比使用整型作為它的參數類性要高。而C++通過模板的機制允許推遲對某些類型的選擇,直到真正想使用模板或者說對模板進行特化的時候,STL就利用了這一點提供了相當多的有用算法。它是在一個有效的框架中完成這些算法的——你可以將所有的類型劃分為少數的幾類,然后就可以在模版的參數中使用一種類型替換掉同一種類中的其他類型。

STL提供了大約100個實現算法的模版函數,比如算法for_each將為指定序列中的每一個元素調用指定的函數,stable_sort以你所指定的規則對序列進行穩定性排序等等。這樣一來,只要我們熟悉了STL之后,許多代碼可以被大大的化簡,只需要通過調用一兩個算法模板,就可以完成所需要的功能并大大地提升效率。

算法部分主要由頭文件<algorithm>,<numeric>和<functional>組成。<algorithm>是所有STL頭文件中最大的一個(盡管它很好理解),它是由一大堆模版函數組成的,可以認為每個函數在很大程度上都是獨立的,其中常用到的功能范圍涉及到比較、交換、查找、遍歷操作、復制、修改、移除、反轉、排序、合并等等。<numeric>體積很小,只包括幾個在序列上面進行簡單數學運算的模板函數,包括加法和乘法在序列上的一些操作。<functional>中則定義了一些模板類,用以聲明函數對象。

三、容器

在實際的開發過程中,數據結構本身的重要性不會遜于操作于數據結構的算法的重要性,當程序中存在著對時間要求很高的部分時,數據結構的選擇就顯得更加重要。

經典的數據結構數量有限,但是我們常常重復著一些為了實現向量、鏈表等結構而編寫的代碼,這些代碼都十分相似,只是為了適應不同數據的變化而在細節上有所出入。STL容器就為我們提供了這樣的方便,它允許我們重復利用已有的實現構造自己的特定類型下的數據結構,通過設置一些模版類,STL容器對最常用的數據結構提供了支持,這些模板的參數允許我們指定容器中元素的數據類型,可以將我們許多重復而乏味的工作簡化。

容器部分主要由頭文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>組成。對于常用的一些容器和容器適配器(可以看作由其它容器實現的容器),可以通過下表總結一下它們和相應頭文件的對應關系。

數據結構 描述 實現頭文件
向量(vector) 連續存儲的元素 <vector>
列表(list) 由節點組成的雙向鏈表,每個結點包含著一個元素 <list>
雙隊列(deque) 連續存儲的指向不同元素的指針所組成的數組 <deque>
集合(set) 由節點組成的紅黑樹,每個節點都包含著一個元素,節點之間以某種作用于元素對的謂詞排列,沒有兩個不同的元素能夠擁有相同的次序 <set>
多重集合(multiset) 允許存在兩個次序相等的元素的集合 <set>
棧(stack) 后進先出的值的排列 <stack>
隊列(queue) 先進先出的執的排列 <queue>
優先隊列(priority_queue) 元素的次序是由作用于所存儲的值對上的某種謂詞決定的的一種隊列 <queue>
映射(map) 由{鍵,值}對組成的集合,以某種作用于鍵對上的謂詞排列 <map>
多重映射(multimap) 允許鍵對有相等的次序的映射 <map>

四、迭代器

下面要說的迭代器從作用上來說是最基本的部分,可是理解起來比前兩者都要費力一些(至少筆者是這樣)。軟件設計有一個基本原則,所有的問題都可以通過引進一個間接層來簡化這種簡化在STL中就是用迭代器來完成的。概括來說,迭代器在STL中用來將算法和容器聯系起來,起著一種黏和劑的作用。幾乎STL提供的所有算法都是通過迭代器存取元素序列進行工作的,每一個容器都定義了其本身所專有的迭代器,用以存取容器中的元素。

迭代器部分主要由頭文件<utility>,<iterator>和<memory>組成。<utility>是一個很小的頭文件,它包括了貫穿使用在STL中的幾個模板的聲明,<iterator>中提供了迭代器使用的許多方法,而對于<memory>的描述則十分的困難,它以不同尋常的方式為容器中的元素分配存儲空間,同時也為某些算法執行期間產生的臨時對象提供機制,<memory>中的主要部分是模板類allocator,它負責產生所有容器中的默認分配器。

五、對初學者學習STL的一點建議

對于之前不太了解STL的讀者來說,上面的文字只是十分概括地描述了一下STL的框架,對您理解STL的機制乃至使用STL所起到的幫助微乎甚微,這不光是因為深入STL需要對C++的高級應用有比較全面的了解,更因為STL的三個部分算法、容器和迭代器三部分是互相牽制或者說是緊密結合的。從概念上講最基礎的部分是迭代器,可是直接學習迭代器會遇到許多抽象枯燥和繁瑣的細節,然而不真正理解迭代器又是無法直接進入另兩部分的學習的(至少對剖析源碼來說是這樣)??梢哉f,適應STL處理問題的方法是需要花費一定的時間的,但是以此為代價,STL取得了一種十分可貴的獨立性,它通過迭代器能在盡可能少地知道某種數據結構的情況下完成對這一結構的運算,所以下決心鉆研STL的朋友們千萬不要被一時的困難擊倒。其實STL運用的模式相對統一,只要適應了它,從一個STL工具到另一個工具,都不會有什么大的變化。

對于STL的使用,也普遍存在著兩種觀點。第一種認為STL的最大作用在于充當經典的數據結構和算法教材,因為它的源代碼涉及了許多具體實現方面的問題。第二種則認為STL的初衷乃是為了簡化設計,避免重復勞動,提高編程效率,因此應該是“應用至上”的,對于源代碼則不必深究。筆者則認為分析源代碼和應用并不矛盾,通過分析源代碼也能提高我們對其應用的理解,當然根據具體的目的也可以有不同的側重。

最后要說的是,STL是ANSI/ISO C++標準的一部分,所以對于一個可以有多種C++實現的過程,首先考慮的應該是STL提供的模板(高效且可移植性好),其次才是各個廠商各自相應的庫高效但可移植性不好)以及自己去編寫代碼可移植性好但低效)。

posted on 2008-09-25 13:04 isabc 閱讀(254) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


廣告信息(免費廣告聯系)

中文版MSDN:
歡迎體驗

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            老司机精品视频一区二区三区| 久久婷婷色综合| 欧美精品久久久久久久| 亚洲一区二区不卡免费| 夜夜嗨av一区二区三区四季av| 亚洲欧美日韩精品久久亚洲区 | 欧美激情久久久| 国产日韩欧美一区| 欧美日韩第一页| 欧美一区日本一区韩国一区| 亚洲一区精品视频| 久久永久免费| 欧美成人性生活| 亚洲美女中文字幕| 亚洲一区二区视频在线| 久久久噜噜噜| 欧美片网站免费| 国产女主播一区| 亚洲精品欧美| 欧美一区二区三区久久精品 | 欧美午夜片在线观看| 国产情侣一区| 日韩亚洲欧美精品| 久久性色av| 一本色道久久| 久久综合久久综合久久综合| 国产精品国产馆在线真实露脸 | 欧美偷拍另类| 原创国产精品91| 亚洲欧美日韩一区二区在线 | 最近中文字幕日韩精品 | 国产精品人人做人人爽人人添| 黄色精品一区| 亚洲精品中文字幕在线| 国产精品久久二区二区| 国产精品草草| 亚洲第一页自拍| 欧美一区二区三区的| 亚洲精品美女在线观看播放| 在线观看一区二区精品视频| 中文欧美字幕免费| 欧美国产精品劲爆| 久久精品国产在热久久| 国产精品视频久久一区| 亚洲精品在线视频观看| 蜜桃久久精品乱码一区二区| 亚洲欧美成人精品| 国产精品h在线观看| 99视频在线观看一区三区| 噜噜噜在线观看免费视频日韩 | 亚洲丝袜av一区| 欧美日韩福利在线观看| 9国产精品视频| 亚洲精品国产系列| 欧美国产日本韩| 亚洲国产综合视频在线观看| 欧美va亚洲va日韩∨a综合色| 羞羞色国产精品| 国产精品一区二区在线| 亚洲免费在线| 亚洲自拍16p| 欧美日韩在线免费| 亚洲视频在线观看一区| 夜夜嗨一区二区| 国产精品久久久久久超碰| 亚洲男人第一网站| 午夜精品久久久久久久久久久久久 | 欧美日韩免费观看一区三区| 亚洲精品免费在线播放| 欧美激情中文字幕在线| 欧美精品亚洲精品| 亚洲午夜三级在线| 亚洲综合清纯丝袜自拍| 国模套图日韩精品一区二区| 老色批av在线精品| 免费看黄裸体一级大秀欧美| 99re这里只有精品6| 一区二区三区视频在线看| 欧美色综合网| 久久精品水蜜桃av综合天堂| 久久久精品欧美丰满| 91久久精品一区二区别| 日韩视频免费看| 国产欧美精品va在线观看| 久久网站免费| 欧美精品在线观看| 欧美一区二区视频在线观看| 久久久99国产精品免费| 亚洲激情视频在线观看| 亚洲欧美日本精品| 在线精品亚洲| 亚洲国产婷婷香蕉久久久久久99 | 久久日韩精品| 99成人精品| 欧美一区二区在线观看| 亚洲日本电影| 亚洲淫性视频| 在线观看一区二区视频| 日韩视频欧美视频| 极品av少妇一区二区| 日韩天堂在线视频| 在线观看成人一级片| 国产精品99久久久久久人| 亚洲成人自拍视频| 亚洲主播在线观看| 一本大道久久a久久精二百| 欧美一区二区三区四区在线观看| 在线观看国产精品网站| 一卡二卡3卡四卡高清精品视频| 国产亚洲一级高清| 99精品99久久久久久宅男| 精品白丝av| 亚洲午夜极品| 中文av一区特黄| 欧美国产欧美亚洲国产日韩mv天天看完整 | 久久久国产91| 欧美在线短视频| 欧美性猛交视频| 亚洲第一在线视频| 国产一区视频网站| 亚洲欧美日韩第一区| 亚洲一区二区三区免费观看| 欧美aⅴ99久久黑人专区| 久久久精品国产一区二区三区| 欧美日韩精品一区二区在线播放| 欧美国产精品日韩| 在线观看日韩www视频免费| 欧美一二区视频| 欧美中文在线字幕| 国产精品久久99| 亚洲线精品一区二区三区八戒| 亚洲免费观看高清在线观看 | 欧美一区二区三区另类| 亚久久调教视频| 国产精品免费aⅴ片在线观看| 亚洲乱码国产乱码精品精可以看| 91久久精品国产91久久性色| 噜噜噜91成人网| 免费在线日韩av| 亚洲国产精品毛片| 欧美成人乱码一区二区三区| 亚洲第一精品夜夜躁人人躁| 亚洲日本欧美在线| 欧美激情视频免费观看| 亚洲日本激情| 亚洲专区免费| 国产精品亚洲综合色区韩国| 日韩视频一区二区三区在线播放免费观看 | 国产一区二区三区久久精品| 午夜精品免费| 久久―日本道色综合久久| 国产日韩综合一区二区性色av| 午夜精品久久久久久99热| 美日韩在线观看| 亚洲精选在线| 国产精品大全| 久久不见久久见免费视频1| 麻豆精品传媒视频| 亚洲人成网站色ww在线| 欧美日韩天天操| 欧美一区二区福利在线| 女主播福利一区| 一本色道久久88综合日韩精品| 欧美日韩一区二区三区在线 | 久热精品视频| 一本不卡影院| 国产婷婷色一区二区三区在线| 久久久久国产精品www| 亚洲国产精品热久久| 亚洲欧美日韩中文在线制服| 国内精品亚洲| 欧美视频中文字幕| 久久久久国产成人精品亚洲午夜| 亚洲精品色图| 久久久高清一区二区三区| 日韩午夜中文字幕| 国产亚洲综合在线| 欧美区日韩区| 久久五月天婷婷| 亚洲一区三区电影在线观看| 欧美成人精品在线| 欧美在线免费观看| 亚洲精品一区二区三区婷婷月| 国产女主播一区二区三区| 欧美激情一区二区三区在线| 久久国产精品72免费观看| 一区二区三区色| 亚洲人人精品| 蜜桃精品久久久久久久免费影院| 亚洲欧美国产精品桃花| 亚洲精品乱码视频| 国内精品久久久久久久影视麻豆| 欧美日本亚洲视频| 免费在线观看一区二区| 欧美中文在线观看国产| 亚洲一二三区视频在线观看| 亚洲欧洲一级| 亚洲成人在线免费| 艳女tv在线观看国产一区| 国内精品久久久久影院薰衣草 |