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