天天看點

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 <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,便可以集中精力去實作程式的功能,而無需再糾結某些細節如何用代碼實作。

不管你是轉行也好,初學也罷,進階也可,如果你想學程式設計,進階程式員~

【值得關注】我的 程式設計學習交流俱樂部 !【點選進入】

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

繼續閱讀