上節學習了模板,那么就得談到C++的標準模板庫STL。
C++98:以模板方式重寫了C++標準庫,引入了STL(標準模板庫)。
1.概念
STL(Standard template Libarary)標準模板庫:是C++標準庫的重要組成部分,不僅是一個可復用的組件庫,而且是保羅數據結構和算法的軟件框架。
2.版本
原始版本
Alexander Stepanov、Meng Lee 在惠普實驗室(HP)完成的原始版本,本著開源精神,他們聲明允許任何人任意運用、拷貝、修改、傳播、商業使用這些代碼,無需付費。唯一的條件就是也需要向原始版本一樣做開源使用。HP版本--所有STL實現版本的始祖。
P.J.版本
由P. J. Plauger開發,繼承自HP版本,被Windows Visual C++采用,不能公開或修改,缺陷:可讀性比較低,符號命名比較怪異。
RW版本
由Rouge Wage公司開發,繼承自HP版本,被C+ + Builder 采用,不能公開或修改,可讀性一般。
SGI版本
由Silicon Graphics Computer Systems,Inc公司開發,繼承自HP版 本。被GCC(Linux)采用,可移植性好,可公開、修改甚至販賣,從命名風格和編程 風格上看,閱讀性非常高。后面學習STL要閱讀部分源代碼,主要參考的就是這個版本。
STL提供的容器和算法是規定死的,雖然有不同的版本,但是功能一致且內部框架類似。
類似于汽車的不同品牌。
3.六大組件
4.學習方法?
使用、理解、擴展。
能夠熟練運用STL標準模板庫,理解STL的底層邏輯并且能夠去模擬實現;
在使用與理解的基礎上,對于一些沒有在庫中的數據結構進行擴展。
5.缺陷?
②STL現在都沒有支持線程安全。并發環境下需要我們自己加鎖。且鎖的粒度是比較大的。
③STL極度的追求效率,導致內部比較復雜。比如類型萃取,迭代器萃取。
④STL的使用會有代碼膨脹的問題,比如使用vector/vector/vector這樣會生成多份代碼,當然這是模板語法本身導致的。