標準模版庫

2021-06-21 17:01:57 字數 1778 閱讀 7100

stl (標準模版庫,standard template library)

和mfc相比,stl更加複雜和強大。stl有以下的一些優點:

---可以方便容易地實現搜尋資料或對資料排序等一系列的演算法;

---除錯程式時更加安全和方便;

---stl是跨平台的

一些基礎概念的定義

模板(template)——類(以及結構等各種資料型別和函式)的巨集(macro)。正規名稱叫范型(generic)——乙個類的模板叫做范型類(generic class),而乙個函式的模板也自然而然地被叫做范型函式(generic function)。

容器(container)——可容納一些資料的模板類。stl中有vector,set,map,multimap和deque等容器。

向量(vector)——基本陣列模板,這是乙個容器。

游標(iterator)——是乙個指標,用來指向stl容器中的元素,也可以指向其它的元素。

//程式:vector演示一

//目的:理解stl中的向量

// #include "stdafx.h" -如果使用預編譯的標頭檔案就包含這個標頭檔案

#include // stl向量的標頭檔案。這裡沒有".h"。

#include // 包含cout物件的標頭檔案。

using namespace std;  //保證在程式中可以使用std命名空間中的成員。

char* szhw = "hello world";  //這是乙個字元陣列,以」/0」結束。

int main(int argc, char* argv)

// push_back函式將資料放在向量的尾部。

// 將向量中的字元乙個個地顯示在控制台

for (vi=vec.begin(); vi!=vec.end(); vi++)  

// 這是stl迴圈的規範化的開始——通常是 "!=" ,而不是 "<". 因為"<" 在一些容器中沒有定義。 

// begin()返回向量起始元素的游標(iterator),end()返回向量末尾元素的游標(iterator)。

// 使用運算子 「*」 將資料從游標指標中提取出來。

cout << endl;  // 換行

return 0;

}push_back是將資料放入vector(向量)或deque(雙端佇列)的標準函式。insert是乙個與之類似的函式,然而它在所有容器中都可以使用,但是用法更加複雜。end()實際上是取末尾加一(取容器中末尾的前乙個元素),以便讓迴圈正確執行——它返回的指標指向最靠近陣列界限的資料。就像普通迴圈中的陣列,比如for (i=0; i<6; i++) ——ar[6]是不存在的,在迴圈中不會達到這個元素,所以在迴圈中不會出現問題。

stl的初始化

stl中容器的初始化比c/c++陣列初始化要麻煩的多。只能乙個元素乙個元素地來,或者先初始化乙個普通陣列再通過轉化填放到容器中。通常可以這樣做:

//程式:初始化演示

//目的:為了說明stl中的向量是怎樣初始化的。

#include // 和相同

#include

using namespace std;

int ar[10] = ;

char* str = "hello world";

int main(int argc, char* argv)

在程式設計中,有很多種方法來完成同樣的工作。另一種填充向量的方法是用更加熟悉的方括號,

雖然在初始化時很麻煩,一旦將資料填如向量中,就實現了乙個變長的可擴充的二維陣列(大小可擴充直到使用完記憶體)。根據實際需要,可以使用各種容器的巢狀組合。

標準模版庫

include include include include using namespace std int main void 使用迭代器遍歷裡面的全部元素 vector iterator itor for itor vec.begin itor vec.end itor cout size v...

C 標準庫和C 標準模版庫

c 標準庫很大,在現在的情況下,c 標準庫確實越來越好,因為大的庫會包含大量的功能.標準庫中的功能越多,開發自己的應用程式時能借助的功能就越多,c 庫並非提供一切 很明顯的是沒有提供開發和圖形使用者介面的支援 但確實提供了很多.標準c 庫中主要有以下主要元件 標準c庫.i 0流技術.string.容...

STL標準模版庫 set操作

include include include include include 仿函式 set是乙個集合,變數內容是唯一的,其中值的順序是按照規則排列的 在插入的時候要刪除,要刪除原有資料在插入。不支援直接訪問操作,不能指定插入位置 using namespace std inttestset01 ...