說起STL(標准模板庫),相信了解C++的都不會陌生吧^_^。LZ是從大三開始學習C++(ps:不是科班出身),並慢慢接觸使用STL的,在學校中使用STL比較多的情況是寫數據結構代碼,使用STL實現數據結構代碼(我的數據結構源碼),使我們專注於考慮算法思想,不拘泥於底層代碼實現。
這裡LZ不講STL的具體知識,只討論關於STL的學習和使用問題!結合LZ的學習過程,LZ覺得C++的學習(當然,這其中包括的STL)大致路線如下:
學習C++(包括STL),當然少不了閱讀書籍,尤其是經典書籍,參考上面的學習路線,對應的推薦書籍如下:
1/2/3:《C++ Primer》 對C++基本概念、技術、以及現代C++編程風格進行了全面而且權威的闡述,是C++初學者的最佳指南,聖經級書籍。
4/5:《STL源碼剖析》 深入分析STL源代碼(SGI版本),幫助你加深對STL的理解,以後使用STL就放心大膽了。
6:《深度探索C++對象模型》 專注於C++面向對象程序設計的底層機制,包括結構式語意、臨時性對象的生成、封裝、繼承,以及虛擬—虛擬函數和虛擬繼承,幫助你理解程序的底層實現,以便寫出更高效的代碼。
當然,在學習的過程中,可以同時閱讀《Effective C++》,幫助你寫出更加健壯的C++代碼。學習C++以及STL閱讀這幾本書,其他的C++書籍大可不必再看了。
STL(Standard Template Library 標准模板庫)是由Alexander Stepanov、Meng Lee和David R Musser在惠普實驗室工作時所開發出來的。從根本上說,STL是一些“容器”的集合,這些“容器”有list,vector,set,map等,STL也是算法和其他一些組件的集合。這裡的“容器”和算法的集合指的是世界上很多聰明人很多年的傑作。STL的目的是標准化組件,這樣就不用重新開發,可以使用現成的組件,STL現在是C++的一部分。
STL提供了六大組件,並且組件彼此間可以組合套用:
網上關於STL的討論還是很多的,比如為何某些公司不允許使用STL?STL到底該不該用?...這裡結合LZ的實際工作經歷,來談談STL的使用問題,LZ目前在某華做安防平台開發,項目中就使用了STL,不過項目中使用的大都是STL中容器、迭代器部分,像算法等其他部分很少使用。LZ覺得,在實際項目中使不使用STL,主要看項目的實際需求,根據具體使用場景來取捨。該安防平台主要負責與設備通信、存儲設備發送上來的圖片和視頻、與web端交互等,由於平台接入設備有限,所以不會有很大的並發量,使用STL完全滿足要求了。
使用STL,避免了底層數據的封裝處理,更專注於業務邏輯實現;但是使用STL可能會產生代碼膨脹問題、內存使用效率問題、類型隱式轉換問題,這些問題在項目中數據量較大或者項目並發要求比較高就會成為性能瓶頸的,注意,STL容器不是線程安全的,在多線程中使用需要自己實現加鎖操作。
學習C++,除了經典書籍外還有另外一個比較重要的資源,那就是開源代碼。閱讀開源代碼,不進可以了解源碼規范,還可以深入了解該系統是如何實現的,加深對技術的理解。閱讀源碼的同時,自己可以嘗試造輪子,關於C++,有幾個比較經典的源碼:
1、為何某些公司不允許使用 C++ STL?
2、《STL源碼剖析》第一章節部分
3、C++實現的數據結構源碼