目錄
?
1.什么是STL
2.STL的版本
3.STL的六大組件
4.STL的重要性
4.1在筆試中
4.2在面試中
4.3.在公司中
5.如何學習STL
6.總結和之后的規劃
1.什么是STL
STL(standard template library-標準模板庫);是C++標準庫的重要組成部分,不僅是一個可復用的組件庫,而且是一個包羅數據結構與算法的軟件框架。
用簡單易懂的話來說就是用模板實現數據結構和算法的庫,我們在之前講了順序表、鏈表、二叉樹等數據結構,這個庫里面都包含,所以我們現在用STL就可以不用自己寫數據結構和算法了,這樣簡化了我們的時間。
2.STL的版本
原始版本
Alexander Stepanov、Meng Lee 在惠普實驗室完成的原始版本,本著開源精神,他們聲明允許
任何人任意運用、拷貝、修改、傳播、商業使用這些代碼,無需付費。唯一的條件就是也需要向原
始版本一樣做開源使用。 HP 版本--所有STL實現版本的始祖。不是C++始祖(始祖你猜,之后面試可能要考,如果不知道了就去找吧(doge))開發的。
首先我們需要了解一下開源和閉源,開源即開放源代碼,這是一個很好的精神,免費的使用,但是這個版本規定如果你做了有效的修改你也需要進行開源,公布自己改變的地方!而閉源就不一樣了,不能修改。開源和閉源都有各自的好處,開源雖然看似很好,但是可維護性不強,之后沒有多少人會去維護的,但是閉源就有人來維護了。
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要閱讀部分源代碼,主要參考的就是這個版本。
我們常用的git/Liunx都是開源的,而Windows、mac、os都是閉源的。
3.STL的六大組件
空間適配器里面的allocator就是內存池,其中我們主要注意的是算法和容器(現階段),因為容器涉及到數據結構的知識等等,而算法就涉及到我們之前的排序等等算法,總之注意的就是這幾個。
4.STL的重要性
4.1在筆試中
(1)二叉樹的層序打印
題目鏈接:把二叉樹打印成多行_牛客題霸_牛客網
這些題目我們現在是不會做的(雖然之前寫過),但是之后學完STL就會了。
(2)重建二叉樹
題目鏈接:重建二叉樹_牛客題霸_牛客網
(3)用兩個棧實現一個隊列
題目鏈接:用兩個棧實現隊列_牛客題霸_牛客網
這些之前我們基本上寫過,但是都要把數據結構的基本上所有代碼都拷貝過去很麻煩,但是現在我們學了C++中的STL后就會好一些了。
4.2在面試中
這里只提供一些面試中的題目,只要知道基本上是什么樣就可以了。
4.3.在公司中
網上有句話說:“不懂STL,不要說你會C++”。STL是C++中的優秀作品,有了它的陪伴,許多底層
的數據結構以及算法都不需要自己重新造輪子,站在前人的肩膀上,健步如飛的快速開發。
5.如何學習STL
學STL有三個境界:
第一境界:熟用STL;
第二境界:了解泛型技術的內涵與STL的學理乃至實作;
第三境界:擴充STL。
三個境界的總結就是:能用,明理,能擴展 。我們主要學到第二個境界就可以了,只要前兩個境界學得好,第三個境界就沒有問題。
為什么我們要擴充STL呢?
有些數據結構和算法在STL中未實現,所以需要擴充。
相當于爬->走->跑。
所以加油吧。
6.總結和之后的規劃
STL在我們C++的學習至關重要,所以之后也就需要每一篇博客要聽懂,但是更多的是自己能用,而不是簡單的看,只能說C++本來是很難的,必須用實際的代碼去學C++,和我之前自己寫的日期管理系統一樣,雖然有些不足,但是也要寫出一些成果就可以了!
之后我將從容器的string和vector開始,但是后面又會加一些內容才講模板進階,而那些stack和queue的擴展內容可能需要之后再講,到時候我會發起一項投票,因為到時候我可能需要學Liunx或者先把C++基本內容學完,所以需要講C++擴展內容還是Liunx都需要額外的理解的,所以到時候再進行簡單的投票吧!反正不會完全按照我的文件中的順序來進行講解,所以到時候還需要繞一些額外的知識(這些知識還沒學,我也不懂)。
下節將講解string了,這個string我們主要是學它的成員函數等等,需要進入這個網頁:
https://legacy.cplusplus.com/reference/
建議先去學習一下這個文檔的使用吧,之后會頻繁用到的。
這講不是來講解知識的,這講是為了后面的內容做鋪墊的,關于string的內容,我可能需要兩篇博客來進行講解,因為它里面雖然在界面的函數少,但是幾乎每一個成員函數都有重載函數,因為它比STL誕生得早,所以封裝的函數太多了,但是不是每個函數都要掌握,主要知道一些重要函數的用法就可以了(具體下一節再講)。string部分需要到4月30日前后才可以更新了哦。
?
?