大家好,我是情報(bào)小哥~
**1、什么是STL **
STL庫英文名叫standard template library,標(biāo)準(zhǔn)模板庫,并且它屬于標(biāo)準(zhǔn)庫的一部分,前面小哥跟大家講解模板的相關(guān)知識(shí)就是為其進(jìn)行鋪墊的。
STL主要是由一些模板函數(shù)和模板類構(gòu)成的,其包含了C++程序開發(fā)中一些非常通用的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)與算法封裝,從而達(dá)到了非常良好的軟件復(fù)用和擴(kuò)展能力,當(dāng)然其背后帶來的是應(yīng)用程序開發(fā)的高效,你不用再去徒手編輯各種數(shù)據(jù)結(jié)構(gòu)和算法來使用,其實(shí)現(xiàn)的高效和穩(wěn)定也減少了程序bug。
而對(duì)于C語言而言目前暫時(shí)沒有這樣的庫,大部分都是各大廠家整理的,或者是一些大牛自己開源的等等,這樣就難以形成一個(gè)比較好的標(biāo)準(zhǔn),不太便于程序員代碼之間的交流和軟件的復(fù)用。
STL庫既然是一個(gè)庫就跟標(biāo)準(zhǔn)庫一樣,如果你覺得方便,或者有這塊需求,直接白嫖,如果你覺得STL實(shí)現(xiàn)得不夠好,或者需改良,也可以自己來編寫。
**2、STL的組成 **
對(duì)于STL主要分為如下6大組件 :
下面小哥簡(jiǎn)單的介紹每個(gè)組件:
**容器 : **是一些用于存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),比如鏈表、隊(duì)列、棧等等,大部分都是類模板。
**算法 : **也就是我們平時(shí)提到的各種算法,比如排序,查找等等,大部分都是一些函數(shù)模板,
**迭代器 : **名字看起來比較高大上,其實(shí)可以認(rèn)為它就是一個(gè)“智能指針”,用于遍歷容器,所以每種容器都有自己的迭代器用來遍歷。
**分配器 : **主要是用于輔助容器分配和管理空間。
**仿函數(shù) : ** 主要是與算法結(jié)合,因函數(shù)指針無法滿足C++抽象需求,通過重載操作符(),來實(shí)現(xiàn)類似函數(shù)調(diào)用的過程。
**適配器 : **其名稱就可以看出,主要是用于接口的相互轉(zhuǎn)換,從而協(xié)調(diào)多種端口,容器、仿函數(shù)、迭代器都可以與適配器結(jié)合,類比電源適配器進(jìn)行電壓轉(zhuǎn)換。
那么下面小哥簡(jiǎn)單的通過一個(gè)圖來描述這6大組件之間的關(guān)聯(lián),以便大家更好的理解。
分配器為容器分配數(shù)據(jù)空間,而迭代器就是為了遍歷容器,算法通過迭代器來訪問容器,仿函數(shù)使得算法更加的靈活,而這些適配器可以為外界提供新的接口。
**3、STL的容器的使用體驗(yàn) **
這里通過一個(gè)簡(jiǎn)單的容器操作來體驗(yàn)一下最基礎(chǔ)的STL使用:
參考例子:
1#include
2#include
3#include
4#include
5
6using namespace std;
7
8int main(int argc, char *argv[])
9{
10 //1、向量容器
11 vector
12
13 cout<<" vr size: "<
15 for(int Index = 0; Index < vr.size(); Index++)
16 {
17 vr[Index] = Index + 1; //直接以數(shù)組方式訪問即可
18 cout<<" vr["<
20
21 //2、隊(duì)列容器適配器(FIFO--即先進(jìn)先出)
22 queue
23
24 for(int cnt = 0 ;cnt < 5;cnt++)
25 {
26 qf.push((float)cnt+0.1); //進(jìn)行入隊(duì)操作
27 cout<<" Queue IN : "<<(float)cnt+0.1<
28 }
29
30 while(!qf.empty())
31 {
32 cout<<" Queue Out: "<
33 qf.pop();//進(jìn)行出隊(duì)操作
34 }
35
36 return EXIT_SUCCESS;
37}
運(yùn)行結(jié)果:
只需要包含相應(yīng)的頭文件即可使用相應(yīng)的模板來供應(yīng)用程序使用,比如例子中使用的隊(duì)列等,不需要我們像C語言那樣再徒手編寫隊(duì)列了,簡(jiǎn)直不要再方便了~
當(dāng)然STL庫遠(yuǎn)比上面復(fù)雜得多,后面小哥還會(huì)為大家慢慢道來~
**最 后 **
這里小哥就介紹了C++中白嫖STL庫。本系列文章還會(huì)持續(xù)更新,以最通俗易懂的方式跟大家談?wù)凜++,期待您的關(guān)注與支持~
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4331瀏覽量
62622 -
C++
+關(guān)注
關(guān)注
22文章
2108瀏覽量
73651 -
STL
+關(guān)注
關(guān)注
0文章
86瀏覽量
18327
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論