房屋自建設(shè)計哪個網(wǎng)站好網(wǎng)絡(luò)推廣seo教程
各位CSDN的uu們好呀,終于到小雅蘭的STL的學習了,下面,讓我們進入C++STL的世界吧!!!
1. 什么是STL
2. STL的版本
3. STL的六大組件
4. STL的重要性
5. 如何學習STL
6.STL的缺陷
7.為什么要學習string類
8.標準庫中的string類
什么是STL
STL(standard template libaray-標準模板庫):是C++標準庫的重要組成部分,不僅是一個可復用的組件庫,而且是一個包羅數(shù)據(jù)結(jié)構(gòu)與算法的軟件框架。
STL的版本
- 原始版本:Alexander Stepanov、Meng Lee 在惠普實驗室完成的原始版本,本著開源精神,他們聲明允許任何人任意運用、拷貝、修改、傳播、商業(yè)使用這些代碼,無需付費。唯一的條件就是也需要向原始版本一樣做開源使用。 HP 版本--所有STL實現(xiàn)版本的始祖。
- P. J. 版本:由P. J. Plauger開發(fā),繼承自HP版本,被Windows Visual C++采用,不能公開或修改,缺陷:可讀性比較低, 符號命名比較怪異。
- RW版本:由Rouge Wage公司開發(fā),繼承自HP版本,被C+ + Builder 采用,不能公開或修改,可讀性一般。
- SGI版本:由Silicon Graphics Computer Systems,Inc公司開發(fā),繼承自HP版本。被GCC(Linux)采用,可移植性好, 可公開、修改甚至販賣,從命名風格和編程 風格上看,閱讀性非常高。我們后面學習STL要閱讀部分源代碼, 主要參考的就是這個版本。
STL的六大組件
STL的重要性
STL模板分為容器、迭代器、算法和函數(shù)對象四個部分。
容器是一種數(shù)據(jù)結(jié)構(gòu),它可以存儲一組數(shù)據(jù)并提供對這些數(shù)據(jù)的訪問方式。STL中提供了多種容器,包括序列容器(如vector、list、deque)、關(guān)聯(lián)容器(如set、map)等等。每種容器都提供了不同的操作方法,可以滿足不同的需求。
迭代器是一種抽象的概念,它提供了對容器中元素的遍歷和訪問方式。STL中提供了多種迭代器,包括隨機訪問迭代器、雙向迭代器、前向迭代器等等。不同類型的迭代器支持不同的操作方式,可以在不同的場景下使用。
算法是STL中的重要部分,它提供了多種常見的算法實現(xiàn),如排序、查找、遍歷等。這些算法可以應用于不同類型的容器和迭代器上,使得程序開發(fā)變得更加簡單和高效。
函數(shù)對象是一種可以被調(diào)用的對象,它可以像函數(shù)一樣被調(diào)用。STL中提供了多種函數(shù)對象,包括算術(shù)運算、關(guān)系運算、邏輯運算等等。函數(shù)對象可以和STL中的算法一起使用,使得算法更加靈活和通用。
總的來說,STL模板提供了豐富的工具集合,可以幫助程序員更加高效地開發(fā)C++程序。使用STL模板可以避免一些繁瑣的工作,如內(nèi)存管理、數(shù)據(jù)結(jié)構(gòu)實現(xiàn)等等,從而使程序員能夠更加關(guān)注于問題的本質(zhì),提高代碼的可讀性和可維護性。
在筆試中
把二叉樹打印成多行_??皖}霸_牛客網(wǎng)
重建二叉樹_??皖}霸_??途W(wǎng)
用兩個棧實現(xiàn)隊列_??皖}霸_牛客網(wǎng)
在面試中
在工作中
網(wǎng)上有句話說:“不懂STL,不要說你會C++”。STL是C++中的優(yōu)秀作品,有了它的陪伴,許多底層的數(shù)據(jù)結(jié)構(gòu)以及算法都不需要自己重新造輪子,站在前人的肩膀上,健步如飛的快速開發(fā)。?
如何學習STL
?簡單總結(jié)一下:學習STL的三個境界:能用,明理,能擴展 !!!
STL的缺陷
- STL庫的更新太慢了。這個得嚴重吐槽,上一版靠譜是C++98,中間的C++03基本一些修訂。C++11出 來已經(jīng)相隔了13年,STL才進一步更新。
- STL現(xiàn)在都沒有支持線程安全。并發(fā)環(huán)境下需要我們自己加鎖。且鎖的粒度是比較大的。
- STL極度的追求效率,導致內(nèi)部比較復雜。比如類型萃取,迭代器萃取。
- STL的使用會有代碼膨脹的問題,比如使用vector/vector/vector這樣會生成多份代碼,當然這是模板語法本身導致的。
為什么學習string類?
C語言中的字符串
C語言中,字符串是以'\0'結(jié)尾的一些字符的集合,為了操作方便,C標準庫中提供了一些str系列的庫函數(shù), 但是這些庫函數(shù)與字符串是分離開的,不太符合OOP的思想,而且底層空間需要用戶自己管理,稍不留神可能還會越界訪問。
兩個面試題
把字符串轉(zhuǎn)換成整數(shù)_牛客題霸_??途W(wǎng)
力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺
在OJ中,有關(guān)字符串的題目基本以string類的形式出現(xiàn),而且在常規(guī)工作中,為了簡單、方便、快捷,基本 都使用string類,很少有人去使用C庫中的字符串操作函數(shù)。
標準庫中的string類
string類(了解)
string - C++ Reference
?
百度百科-驗證
百度百科-驗證
- 字符串是表示字符序列的類
- 標準的字符串類提供了對此類對象的支持,其接口類似于標準字符容器的接口,但添加了專門用于操作 單字節(jié)字符字符串的設(shè)計特性。
- string類是使用char(即作為它的字符類型,使用它的默認char_traits和分配器類型(關(guān)于模板的更多信 息,請參閱basic_string)。
- string類是basic_string模板類的一個實例,它使用char來實例化basic_string模板類,并用char_traits和allocator作為basic_string的默認參數(shù)(根于更多的模板信息請參考basic_string)。
- 注意,這個類獨立于所使用的編碼來處理字節(jié):如果用來處理多字節(jié)或變長字符(如UTF-8)的序列,這個 類的所有成員(如長度或大小)以及它的迭代器,將仍然按照字節(jié)(而不是實際編碼的字符)來操作。
總結(jié):
- string是表示字符串的字符串類
- 該類的接口與常規(guī)容器的接口基本相同,再添加了一些專門用來操作string的常規(guī)操作。
- string在底層實際是:basic_string模板類的別名,typedef basic_string string;
- 不能操作多字節(jié)或者變長字符的序列。
在使用string類時,必須包含#include頭文件以及using namespace std;
好啦,剩下的string的詳細內(nèi)容小雅蘭下一篇博客再來介紹,敬請期待吧!!!