STL,英文全稱 standard template library,中文可譯為標(biāo)準(zhǔn)模板庫或者泛型庫,其包含有大量的模板類和模板函數(shù),是 C++ 提供的一個(gè)基礎(chǔ)模板的集合,用于完成諸如輸入/輸出、數(shù)學(xué)計(jì)算等功能。
STL 最初由惠普實(shí)驗(yàn)室開發(fā),于 1998 年被定為國際標(biāo)準(zhǔn),正式成為 C++ 程序庫的重要組成部分。
STL從廣義上講分為三類:algorithm(算法)、container(容器)和iterator(迭代器),容器和算法通過迭代器可以進(jìn)行無縫地連接。幾乎所有的代碼都采 用了模板類和模板函數(shù)的方式,這相比于傳統(tǒng)的由函數(shù)和類組成的庫來說提供了更好的代碼重用機(jī)會(huì)。
STL細(xì)說六大件:
*– 容器(Container)*
*– 算法(Algorithm)*
*– 迭代器(Iterator)*
*– 仿函數(shù)(Function object)*
*– 適配器(Adaptor)*
*– 空間配制器(allocator)*
在C++標(biāo)準(zhǔn)中,STL被組織為下面的13個(gè)頭文 件:、、、、、、、、、、、 和。
說了這么多,使用STL有什么好處呢?
1)STL是C++的一部分,因此不用額外安裝什么,它被內(nèi)建在你的編譯器之內(nèi)。
2)STL的一個(gè)重要特點(diǎn)是數(shù)據(jù)結(jié)構(gòu)和算法的分離。盡管這是個(gè)簡單的概念,但是這種分離確實(shí)使得STL變得非常通用。
3) 程序員可以不用思考STL具體的實(shí)現(xiàn)過程,只要能夠熟練使用STL就OK了。這樣他們就可以把精力放在程序開發(fā)的別的方面。
4) STL具有高可重用性,高性能,高移植性,跨平臺(tái)的優(yōu)點(diǎn)。
高可重用性:STL中幾乎所有的代碼都采用了模板類和模版函數(shù)的方式實(shí)現(xiàn),這相比于傳統(tǒng)的由函數(shù)和類組成的庫來說提供了更好的代碼重用機(jī)會(huì)。關(guān)于模板的知識(shí),已經(jīng)給大家介紹了。
高性能:如map可以高效地從十萬條記錄里面查找出指定的記錄,因?yàn)閙ap是采用紅黑樹的變體實(shí)現(xiàn)的。(紅黑樹是平橫二叉樹的一種)
高移植性:如在項(xiàng)目A上用STL編寫的模塊,可以直接移植到項(xiàng)目B上。
跨平臺(tái):如用windows的Visual Studio編寫的代碼可以在Mac OS的XCode上直接編譯。
5) 了解到STL的這些好處,我們知道STL無疑是最值得C++程序員驕傲的一部分。每一個(gè)C++程序員都應(yīng)該好好學(xué)習(xí)STL。只有能夠熟練使用STL的程序員,才是好的C++程序員。
6) 總之:招聘工作中,經(jīng)常遇到C++程序員對STL不是非常了解。大多是有一個(gè)大致的印像,而對于在什么情況下應(yīng)該使用哪個(gè)容器和算法都感到比較茫然。 STL是C++程序員的一項(xiàng)不可或缺的基本技能 ,掌握它對提升C++編程大有裨益。
Alexander Stepanov
容器
一些封裝數(shù)據(jù)結(jié)構(gòu)的模板類,簡單來說,就是存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)
序列式容器:特點(diǎn)是不會(huì)對存儲(chǔ)的元素進(jìn)行排序,元素排列的順序取決于存儲(chǔ)它們的順序。
關(guān)聯(lián)式容器:在存儲(chǔ)元素時(shí)會(huì)為每個(gè)元素在配備一個(gè)鍵,整體以鍵值對的方式存儲(chǔ)到容器中,可以通過鍵值直接找到對應(yīng)的元素,而無需遍歷整個(gè)容器。另外,關(guān)聯(lián)式容器在存儲(chǔ)元素,默認(rèn)會(huì)根據(jù)各元素鍵值的大小做升序排序。
迭代器
用來遍歷容器中的元素的類型, 類中類 (可以理解為指針),扮演著容器和算法之間的膠合劑
算法
解決問題的方法
容器、迭代器、算法分離案例
#include
using namespace std;
//算法:求數(shù)組元素個(gè)數(shù)
int mcount(int* begin, int* end, int arr[])
{
int num = 0;
while (begin != end)
{
num++;
begin++;
}
return num;
}
int main()
{
//容器
int arr[] = { 7,1,2,5,4,7,5 };
//迭代器
int* begin = arr;
int* end = &arr[sizeof(arr) / sizeof(arr[0])];
cout << mcount(begin, end, arr);
while (1);
return 0;
}
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4277瀏覽量
62323 -
C++
+關(guān)注
關(guān)注
21文章
2100瀏覽量
73453 -
STL
+關(guān)注
關(guān)注
0文章
85瀏覽量
18290
發(fā)布評論請先 登錄
相關(guān)推薦
評論