個(gè)人主頁(yè) : zxctscl
如有轉(zhuǎn)載請(qǐng)先通知
1. 什么是STL
STL(standard template libaray-標(biāo)準(zhǔn)模板庫(kù)):是C++標(biāo)準(zhǔn)庫(kù)的重要組成部分,不僅是一個(gè)可復(fù)用的組件庫(kù),而且是一個(gè)包羅數(shù)據(jù)結(jié)構(gòu)與算法的軟件框架。
STL是C++標(biāo)準(zhǔn)庫(kù)的一部分,像之前的iostream也是標(biāo)椎庫(kù)的一部分,不能任務(wù)STL里面包含iostream。它們的關(guān)系是同級(jí)的。
2. STL的版本
-
原始版本
Alexander Stepanov、Meng Lee 在惠普實(shí)驗(yàn)室完成的原始版本,本著開源精神,他們聲明允許任何人任意運(yùn)用、拷貝、修改、傳播、商業(yè)使用這些代碼,無(wú)需付費(fèi)。唯一的條件就是也需要向原始版本一樣做開源使用。 HP 版本–所有STL實(shí)現(xiàn)版本的始祖。 -
P. J. 版本
由P. J. Plauger開發(fā),繼承自HP版本,被Windows Visual C++采用,不能公開或修改,缺陷:可讀性比較低,符號(hào)命名比較怪異。 -
RW版本
由Rouge Wage公司開發(fā),繼承自HP版本,被C+ + Builder 采用,不能公開或修改,可讀性一般。 -
SGI版本
由Silicon Graphics Computer Systems,Inc公司開發(fā),繼承自HP版 本。被GCC(Linux)采用,可移植性好,可公開、修改甚至販賣,從命名風(fēng)格和編程 風(fēng)格上看,閱讀性非常高。在后面學(xué)習(xí)STL要閱讀部分源代碼,主要參考的就是這個(gè)版本。
3. STL的六大組件
STL包含六大組件,分別是:
-
容器(Containers):容器是STL中最重要的組件之一。它提供了各種數(shù)據(jù)結(jié)構(gòu)(如數(shù)組、鏈表、堆、映射等),用于存儲(chǔ)和組織數(shù)據(jù)。常用的容器包括vector、list、deque、set、map等。
-
算法(Algorithms):算法是STL的核心組件之一,提供了一系列的常用算法,如排序、查找、合并、拷貝等。開發(fā)者可以直接調(diào)用這些算法,在容器上進(jìn)行各種操作。
-
迭代器(Iterators):迭代器是STL中非常重要的概念,用于遍歷容器中的元素。迭代器提供了一種統(tǒng)一的方式來(lái)訪問和操作容器中的元素,使得算法可以獨(dú)立于具體容器的實(shí)現(xiàn)。
-
配接器(Adapters):適配器是STL中用于擴(kuò)展和修改容器或算法功能的組件。STL提供了多種適配器,如stack、queue、priority_queue等,可以通過(guò)適配器將容器或算法的接口進(jìn)行轉(zhuǎn)換,以滿足特定的需求。
-
空間配置器(Allocators):分配器是STL中用于內(nèi)存管理的組件。STL的容器在內(nèi)部使用分配器來(lái)動(dòng)態(tài)分配和釋放內(nèi)存,開發(fā)者可以通過(guò)自定義分配器,對(duì)內(nèi)存分配進(jìn)行優(yōu)化或擴(kuò)展。
-
仿函數(shù)(Functors):仿函數(shù)是STL中用于封裝函數(shù)對(duì)象的組件。STL的算法中經(jīng)常需要接受一個(gè)函數(shù)對(duì)象作為參數(shù),用于指定具體的操作。仿函數(shù)實(shí)際上是一種重載了函數(shù)調(diào)用操作符的類,可以像函數(shù)一樣調(diào)用。
總的來(lái)說(shuō),STL的六大組件提供了一套完整的工具箱,可以幫助開發(fā)者快速地實(shí)現(xiàn)各種常用的數(shù)據(jù)結(jié)構(gòu)和算法,提高開發(fā)效率和代碼的可重用性。
4. STL的重要性
在一些筆試題目里面就有,就像下面這題:
用C語(yǔ)言代碼可能是c++代碼的兩倍,
在面試?yán)锩嬉灿邢嚓P(guān)的題目:
網(wǎng)上有句話說(shuō):“不懂STL,不要說(shuō)你會(huì)C++”。STL是C++中的優(yōu)秀作品,有了它的陪伴,許多底層的數(shù)據(jù)結(jié)構(gòu)以及算法都不需要自己重新造輪子,站在前人的肩膀上,健步如飛的快速開發(fā)。
5. 如何學(xué)習(xí)STL
簡(jiǎn)單總結(jié)一下:學(xué)習(xí)STL的三個(gè)境界:1. 使用,2. 明理,3. 擴(kuò)展 。
前面兩個(gè)走好了才能走第三個(gè)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-842215.html
6. STL的缺陷
- STL庫(kù)的更新太慢了。這個(gè)得嚴(yán)重吐槽,上一版靠譜是C++98,中間的C++03基本一些修訂。C++11出來(lái)已經(jīng)相隔了13年,STL才進(jìn)一步更新。
- STL現(xiàn)在都沒有支持線程安全。并發(fā)環(huán)境下需要我們自己加鎖。且鎖的粒度是比較大的。
- STL極度的追求效率,導(dǎo)致內(nèi)部比較復(fù)雜。比如類型萃取,迭代器萃取。
- STL的使用會(huì)有代碼膨脹的問題,比如使用vector/vector/vector這樣會(huì)生成多份代碼,當(dāng)然這是模板語(yǔ)法本身導(dǎo)致的。
有問題請(qǐng)指出,大家一起進(jìn)步吧?。?!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-842215.html
到了這里,關(guān)于【C++】了解一下STL的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!