STL

標準樣板函式庫(Standard Template Library)是以樣板(Template)概念為基礎,定義了重複可利用的元件,元件提供儲存資料的容器與對資料進行處理的演算法,可以省去撰寫資料結構與演算法複雜的實作程式,但仍須了解資料結構與演算法的邏輯概念與運作,才能有效利用這些資料結構與演算法

標準樣板函式庫(Standard Template Library)分

1. 容器(container)

2. 迭代器(iterator)

3. 演算法(algorithm)

簡介標準樣板函式庫

容器分成

1. 循序式容器(sequence containers)

循序式容器是一種線性的資料儲存容器,分成vectordequelist等三種

2. 關聯式容器(associative containers)

關聯式容器為非線性儲存容器,可以快速搜尋資料,可以用於儲存資料的集合,與鍵值與儲存值(key與value)配對的資料結構,分成setmultisetmapmultimap等四種

3. 配接器(container adapters)

而配接器為序列式容器的變形,只允許特定儲存資料的方向,分成stackqueuepriority_queue等三種

迭代器(iterator)類似指標的功能,可以指定容器中個別的元素,可以與演算法功能一起使用。只有vector與deque支援隨機的迭代器,而list、set、multiset、map與multimap支援雙向的迭代器,但配接器stack、queue與priority_queue不支援迭代器的使用。

演算法(algorithm)提供搜尋、排序與比較等功能,可以將這些功能應用在不同的容器上,讓演算法與資料容器分開,演算法也可以重複使用,增加演算法的使用彈性,減少使用者程式碼的撰寫,且大部分會使用演算法會配合迭代器存取個別元素。

標準樣板函式庫所需標頭檔與提供的類別對應如下表。

應用STL解題

將城市名稱轉成數字

範例說明

使用vector實作一個程式將「台北市」、「新北市」、「台中市」、「台南市」與「高雄市」城市名稱依序轉成0到4的數字,通常用於將地名轉成數字,建立城市之間的圖形資料結構用,因為城市名稱不適合用於建立圖形資料結構,需將城市名稱轉換成數字,相同的城市名稱要對應相同數字,不同城市名稱對應不同數字。使用二維整數陣列就可以記錄圖形是否有邊相連,建立圖形資料結構。

建立圖形

範例說明

實作一個程式將以下無向圖,儲存到deque陣列中,未來在圖形走訪單元就可以使用此deque陣列,進行圖形的深度優先走訪或廣度優先走訪。若輸入的點是字串名稱也沒關係,可以使用字串轉換成數字,再建立圖形。

我們要利用deque陣列的每個元素紀錄可以連出去的點,假設deque陣列名稱為F,以本圖形而言,F[0]表示點0可以連出去的點就加到F[0]裡,F[0]會有1與2,F[1]會有0、1與2,F[2]會有0、1,F[3]會有1,將圖形結構轉成deque陣列,走訪此圖形就相當於走訪對應的deque陣列。