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];
這種定義陣列的方法需要事先確定好陣列的長度,即 n 必須為常量,這意味著,如果在實際應用中無法確定陣列長度,則一般會將陣列長度設為可能的最大值,但這極有可能導致儲存空間的浪費。
所以除此之外,還可以採用在堆空間中動態申請記憶體的方法,此時長度可以是變數:
int *p = new int[n];
這種定義方式可根據變數 n 動態申請記憶體,不會出現儲存空間浪費的問題。但是,如果程式執行過程中出現空間不足的情況時,則需要加大儲存空間,此時需要進行如下操作:
新申請一個較大的記憶體空間,即執行
int * temp = new int[m];
將原記憶體空間的資料全部複製到新申請的記憶體空間中,即執行
memecpy(temp, p, sizeof(int)*n);
將原來的堆空間釋放,即執行
delete [] p; p = temp;
————————————
而完成相同的操作,如果採用 STL 標準庫,則會簡單很多,因為大多數操作細節將不需要程式設計師關心。下面是使用向量模板類 vector 實現以上功能的示例:
vector
//向陣列 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,便可以集中精力去實現程式的功能,而無需再糾結某些細節如何用程式碼實現。
不管你是轉行也好,初學也罷,進階也可,如果你想學程式設計,進階程式設計師~
【值得關注】我的
程式設計學習交流專欄:
C/C++程式設計學習殿堂
全棧程式設計師正在等你加入~