動態(tài)網(wǎng)站建設(shè)04章在線測試關(guān)鍵詞排名優(yōu)化易下拉霸屏
一、概念
STL,英文全稱 standard template library,中文可譯為標(biāo)準(zhǔn)模板庫或者泛型庫,其包含有大量的模板類和模板函數(shù),是 C++ 提供的一個基礎(chǔ)模板的集合,用于完成諸如輸入/輸出、數(shù)學(xué)計算等功能。
STL 最初由惠普實驗室開發(fā),于 1998 年被定為國際標(biāo)準(zhǔn),正式成為 C++ 程序庫的重要組成部分。值得一提的是,如今 STL 已完全被內(nèi)置到支持 C++ 的編譯器中,無需額外安裝,這可能也是 STL 被廣泛使用的原因之一。
STL 就位于各個 C++ 的頭文件中,即它并非以二進(jìn)制代碼的形式提供,而是以源代碼的形式提供。
從根本上說,STL 是一些容器、算法和其他一些組件的集合,所有容器和算法都是總結(jié)了幾十年來算法和數(shù)據(jù)結(jié)構(gòu)的研究成果,匯集了許多計算機專家學(xué)者經(jīng)驗的基礎(chǔ)上實現(xiàn)的,因此可以說,STL 基本上達(dá)到了各種存儲方法和相關(guān)算法的高度優(yōu)化。
二、STL能干什么?
為了讓讀者清楚地了解 STL 是什么,使用 STL 編程有哪些優(yōu)勢,這里舉一個使用 STL 的例子。
以 C++ 定義數(shù)組的操作為例,在 C++ 中如果定義一個數(shù)組,可以采用如下方式:
int a[n];
這種定義數(shù)組的方法需要事先確定好數(shù)組的長度,即 n 必須為常量,這意味著,如果在實際應(yīng)用中無法確定數(shù)組長度,則一般會將數(shù)組長度設(shè)為可能的最大值,但這極有可能導(dǎo)致存儲空間的浪費。
所以除此之外,還可以采用在堆空間中動態(tài)申請內(nèi)存的方法,此時長度可以是變量:
int *p = new int[n];
這種定義方式可根據(jù)變量 n 動態(tài)申請內(nèi)存,不會出現(xiàn)存儲空間浪費的問題。但是,如果程序執(zhí)行過程中出現(xiàn)空間不足的情況時,則需要加大存儲空間,此時需要進(jìn)行如下操作:
新申請一個較大的內(nèi)存空間,即執(zhí)行int * temp = new int[m];
將原內(nèi)存空間的數(shù)據(jù)全部復(fù)制到新申請的內(nèi)存空間中,即執(zhí)行memecpy(temp, p, sizeof(int)*n);
將原來的堆空間釋放,即執(zhí)行delete [] p; p = temp;
而完成相同的操作,如果采用 STL 標(biāo)準(zhǔn)庫,則會簡單很多,因為大多數(shù)操作細(xì)節(jié)將不需要程序員關(guān)心。下面是使用向量模板類 vector 實現(xiàn)以上功能的示例:
vector <int> a; //定義 a 數(shù)組,當(dāng)前數(shù)組長度為 0,但和普通數(shù)組不同的是,此數(shù)組 a 可以根據(jù)存儲數(shù)據(jù)的數(shù)量自動變長。
//向數(shù)組 a 中添加 10 個元素
for (int i = 0; i < 10 ; i++)a.push_back(i)
//還可以手動調(diào)整數(shù)組 a 的大小
a.resize(100);
a[90] = 100;
//還可以直接刪除數(shù)組 a 中所有的元素,此時 a 的長度變?yōu)?0
a.clear();
//重新調(diào)整 a 的大小為 20,并存儲 20 個 -1 元素。
a.resize(20, -1)
對比以上兩種使用數(shù)組的方式不難看出,使用 STL 可以更加方便靈活地處理數(shù)據(jù)。