欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
什么是STL

什么是STL

 

一、STL簡(jiǎn)介
STL(Standard Template Library,標準模板庫)是惠普實(shí)驗室開(kāi)發(fā)的一系列軟件的統稱(chēng)
。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普實(shí)驗室工作時(shí)所開(kāi)發(fā)
出來(lái)的?,F在雖說(shuō)它主要出現在C++中,但在被引入C++之前該技術(shù)就已經(jīng)存在了很長(cháng)的
一段時(shí)間。
STL的代碼從廣義上講分為三類(lèi):algorithm(算法)、container(容器)和iterator(
迭代器),幾乎所有的代碼都采用了模板類(lèi)和模版函數的方式,這相比于傳統的由函數
和類(lèi)組成的庫來(lái)說(shuō)提供了更好的代碼重用機會(huì )。在C++標準中,STL被組織為下面的13個(gè)
頭文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<m
ap>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。以下筆者就簡(jiǎn)單
介紹一下STL各個(gè)部分的主要特點(diǎn)。
二、算法
大家都能取得的一個(gè)共識是函數庫對數據類(lèi)型的選擇對其可重用性起著(zhù)至關(guān)重要的作用
。舉例來(lái)說(shuō),一個(gè)求方根的函數,在使用浮點(diǎn)數作為其參數類(lèi)型的情況下的可重用性肯
定比使用整型作為它的參數類(lèi)性要高。而C++通過(guò)模板的機制允許推遲對某些類(lèi)型的選擇
,直到真正想使用模板或者說(shuō)對模板進(jìn)行特化的時(shí)候,STL就利用了這一點(diǎn)提供了相當多
的有用算法。它是在一個(gè)有效的框架中完成這些算法的——你可以將所有的類(lèi)型劃分為
少數的幾類(lèi),然后就可以在模版的參數中使用一種類(lèi)型替換掉同一種類(lèi)中的其他類(lèi)型。

STL提供了大約100個(gè)實(shí)現算法的模版函數,比如算法for_each將為指定序列中的每一個(gè)
元素調用指定的函數,stable_sort以你所指定的規則對序列進(jìn)行穩定性排序等等。這樣
一來(lái),只要我們熟悉了STL之后,許多代碼可以被大大的化簡(jiǎn),只需要通過(guò)調用一兩個(gè)算
法模板,就可以完成所需要的功能并大大地提升效率。
算法部分主要由頭文件<algorithm>,<numeric>和<functional>組成。<algorithm>是所
有STL頭文件中最大的一個(gè)(盡管它很好理解),它是由一大堆模版函數組成的,可以認
為每個(gè)函數在很大程度上都是獨立的,其中常用到的功能范圍涉及到比較、交換、查找
、遍歷操作、復制、修改、移除、反轉、排序、合并等等。<numeric>體積很小,只包括
幾個(gè)在序列上面進(jìn)行簡(jiǎn)單數學(xué)運算的模板函數,包括加法和乘法在序列上的一些操作。
<functional>中則定義了一些模板類(lèi),用以聲明函數對象。
三、容器
在實(shí)際的開(kāi)發(fā)過(guò)程中,數據結構本身的重要性不會(huì )遜于操作于數據結構的算法的重要性
,當程序中存在著(zhù)對時(shí)間要求很高的部分時(shí),數據結構的選擇就顯得更加重要。
經(jīng)典的數據結構數量有限,但是我們常常重復著(zhù)一些為了實(shí)現向量、鏈表等結構而編寫(xiě)
的代碼,這些代碼都十分相似,只是為了適應不同數據的變化而在細節上有所出入。ST
L容器就為我們提供了這樣的方便,它允許我們重復利用已有的實(shí)現構造自己的特定類(lèi)型
下的數據結構,通過(guò)設置一些模版類(lèi),STL容器對最常用的數據結構提供了支持,這些模
板的參數允許我們指定容器中元素的數據類(lèi)型,可以將我們許多重復而乏味的工作簡(jiǎn)化
。
容器部分主要由頭文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>組成
。對于常用的一些容器和容器適配器(可以看作由其它容器實(shí)現的容器),可以通過(guò)下
表總結一下它們和相應頭文件的對應關(guān)系。
數據結構           描述                                實(shí)現頭文件
向量(vector)     連續存儲的元素                         <vector>

列表(list) 由節點(diǎn)組成的雙向鏈表,每個(gè)結點(diǎn)包含著(zhù)一個(gè)元素 <list>

雙隊列(deque) 連續存儲的指向不同元素的指針所組成的數組  <deque>

集合(set) 由節點(diǎn)組成的紅黑樹(shù),每個(gè)節點(diǎn)都包含著(zhù)一個(gè)元素,節點(diǎn)之間以某種作用于
元素對的謂詞排列,沒(méi)有兩個(gè)不同的元素能夠擁有相同的次序   <set>

多重集合(multiset) 允許存在兩個(gè)次序相等的元素的集合      <set>

棧(stack)       后進(jìn)先出的值的排列                      <stack>

隊列(queue)   先進(jìn)先出的執的排列                        <queue>

優(yōu)先隊列(priority_queue) 元素的次序是由作用于所存儲的值對上的某種謂詞決定的的
一種隊列                                                <queue>

映射(map) 由{鍵,值}對組成的集合,以某種作用于鍵對上的謂詞排列  <map>
多重映射(multimap)    允許鍵對有相等的次序的映射        <map>
四、迭代器
下面要說(shuō)的迭代器從作用上來(lái)說(shuō)是最基本的部分,可是理解起來(lái)比前兩者都要費力一些
(至少筆者是這樣)。軟件設計有一個(gè)基本原則,所有的問(wèn)題都可以通過(guò)引進(jìn)一個(gè)間接
層來(lái)簡(jiǎn)化,這種簡(jiǎn)化在STL中就是用迭代器來(lái)完成的。概括來(lái)說(shuō),迭代器在STL中用來(lái)將
算法和容器聯(lián)系起來(lái),起著(zhù)一種黏和劑的作用。幾乎STL提供的所有算法都是通過(guò)迭代器
存取元素序列進(jìn)行工作的,每一個(gè)容器都定義了其本身所專(zhuān)有的迭代器,用以存取容器
中的元素。
迭代器部分主要由頭文件<utility>,<iterator>和<memory>組成。<utility>是一個(gè)很小
的頭文件,它包括了貫穿使用在STL中的幾個(gè)模板的聲明,<iterator>中提供了迭代器使
用的許多方法,而對于<memory>的描述則十分的困難,它以不同尋常的方式為容器中的
元素分配存儲空間,同時(shí)也為某些算法執行期間產(chǎn)生的臨時(shí)對象提供機制,<memory>中的
主要部分是模板類(lèi)allocator,它負責產(chǎn)生所有容器中的默認分配器。
五、對初學(xué)者學(xué)習STL的一點(diǎn)建議
對于之前不太了解STL的讀者來(lái)說(shuō),上面的文字只是十分概括地描述了一下STL的框架,
對您理解STL的機制乃至使用STL所起到的幫助微乎甚微,這不光是因為深入STL需要對C
++的高級應用有比較全面的了解,更因為STL的三個(gè)部分算法、容器和迭代器三部分是互
相牽制或者說(shuō)是緊密結合的。從概念上講最基礎的部分是迭代器,可是直接學(xué)習迭代器
會(huì )遇到許多抽象枯燥和繁瑣的細節,然而不真正理解迭代器又是無(wú)法直接進(jìn)入另兩部分
的學(xué)習的(至少對剖析源碼來(lái)說(shuō)是這樣)??梢哉f(shuō),適應STL處理問(wèn)題的方法是需要花費
一定的時(shí)間的,但是以此為代價(jià),STL取得了一種十分可貴的獨立性,它通過(guò)迭代器能在
盡可能少地知道某種數據結構的情況下完成對這一結構的運算,所以下決心鉆研STL的朋
友們千萬(wàn)不要被一時(shí)的困難擊倒。其實(shí)STL運用的模式相對統一,只要適應了它,從一個(gè)
STL工具到另一個(gè)工具,都不會(huì )有什么大的變化。
對于STL的使用,也普遍存在著(zhù)兩種觀(guān)點(diǎn)。第一種認為STL的最大作用在于充當經(jīng)典的數
據結構和算法教材,因為它的源代碼涉及了許多具體實(shí)現方面的問(wèn)題。第二種則認為ST
L的初衷乃是為了簡(jiǎn)化設計,避免重復勞動(dòng),提高編程效率,因此應該是“應用至上”的
,對于源代碼則不必深究。筆者則認為分析源代碼和應用并不矛盾,通過(guò)分析源代碼也
能提高我們對其應用的理解,當然根據具體的目的也可以有不同的側重。
最后要說(shuō)的是,STL是ANSI/ISO C++標準的一部分,所以對于一個(gè)可以有多種C++實(shí)現的
過(guò)程,首先考慮的應該是STL提供的模板(高效且可移植性好),其次才是各個(gè)廠(chǎng)商各自
相應的庫(高效但可移植性不好)以及自己去編寫(xiě)代碼(可移植性好但低效)。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
C++的標準模板庫(STL)簡(jiǎn)介
編程新書(shū)推薦:C 標準模板庫編程實(shí)踐
STL簡(jiǎn)介
標準模板類(lèi)(STL)(一),綜述、容器及其操作
標準模板庫(STL)使用入門(mén)(下)
STL學(xué)習總結
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久