C++ STL(標準模板庫)是什麼,有什麼用?

首先來了解什麼是 STL,以及學習 STL 有什麼用?程序員

STL,英文全稱 standard template library,中文可譯爲標準模板庫或者泛型庫,其包含有大量的模板類和模板函數,是 C++ 提供的一個基礎模板的集合,用於完成諸如輸入/輸出、數學計算等功能。算法

STL 最初由惠普實驗室開發,於 1998 年被定爲國際標準,正式成爲 C++ 程序庫的重要組成部分。值得一提的是,現在 STL 已徹底被內置到支持 C++ 的編譯器中,無需額外安裝,這可能也是 STL 被普遍使用的緣由之一。編程

STL 就位於各個 C++ 的頭文件中,即它並不是以二進制代碼的形式提供,而是以源代碼的形式提供。數組

從根本上說,STL 是一些容器、算法和其餘一些組件的集合,全部容器和算法都是總結了幾十年來算法和數據結構的研究成果,聚集了許多計算機專家學者經驗的基礎上實現的,所以能夠說,STL 基本上達到了各類存儲方法和相關算法的高度優化。數據結構

注意,這裏提到的容器,本質上就是封裝有數據結構的模板類,例如 list、vector、set、map 等,有關這些容器的具體用法,後續章節會作詳細介紹。函數

 

學STL能幹什麼?

爲了讓讀者清楚地瞭解 STL 是什麼,使用 STL 編程有哪些優點,這裏舉一個使用 STL 的例子。學習

以 C++ 定義數組的操做爲例,在 C++ 中若是定義一個數組,能夠採用以下方式:優化

int a[n];spa

這種定義數組的方法須要事先肯定好數組的長度,即 n 必須爲常量,這意味着,若是在實際應用中沒法肯定數組長度,則通常會將數組長度設爲可能的最大值,但這極有可能致使存儲空間的浪費。3d

因此除此以外,還能夠採用在堆空間中動態申請內存的方法,此時長度能夠是變量:

int *p = new int[n];

這種定義方式可根據變量 n 動態申請內存,不會出現存儲空間浪費的問題。可是,若是程序執行過程當中出現空間不足的狀況時,則須要加大存儲空間,此時須要進行以下操做:

新申請一個較大的內存空間,即執行 int * temp = new int[m];

將原內存空間的數據所有複製到新申請的內存空間中,即執行 memecpy(temp, p, sizeof(int)*n);

將原來的堆空間釋放,即執行 delete [] p; p = temp;

————————————

而完成相同的操做,若是採用 STL 標準庫,則會簡單不少,由於大多數操做細節將不須要程序員關心。下面是使用向量模板類 vector 實現以上功能的示例:

vector <int> a; //定義 a 數組,當前數組長度爲 0,但和普通數組不一樣的是,此數組 a 能夠根據存儲數據的數量自動變長。

//向數組 a 中添加 10 個元素

for (int i = 0; i < 10 ; i++)

    a.push_back(i)

//還能夠手動調整數組 a 的大小

a.resize(100);

a[90] = 100;

//還能夠直接刪除數組 a 中全部的元素,此時 a 的長度變爲 0

a.clear();

//從新調整 a 的大小爲 20,並存儲 20 個 -1 元素。

a.resize(20, -1)

注意,初學者只需結合註釋,大概瞭解代碼功能便可,有關代碼中涉及到具體知識,後續會作詳細介紹。

對比以上兩種使用數組的方式不難看出,使用 STL 能夠更加方便靈活地處理數據。因此,你們只須要系統地學習 STL,即可以集中精力去實現程序的功能,而無需再糾結某些細節如何用代碼實現。


 

無論你是轉行也好,初學也罷,進階也可,若是你想學編程,進階程序員~

【值得關注】個人 編程學習交流俱樂部 !【點擊進入】

全棧程序員正在等你加入~

相關文章
相關標籤/搜索