STL
標準樣板函式庫(Standard Template Library)是以樣板(Template)概念為基礎,定義了重複可利用的元件,元件提供儲存資料的容器與對資料進行處理的演算法,可以省去撰寫資料結構與演算法複雜的實作程式,但仍須了解資料結構與演算法的邏輯概念與運作,才能有效利用這些資料結構與演算法
標準樣板函式庫(Standard Template Library)分
1. 容器(container)
2. 迭代器(iterator)
3. 演算法(algorithm)
簡介標準樣板函式庫
容器分成
1. 循序式容器(sequence containers)
循序式容器是一種線性的資料儲存容器,分成vector、deque與list等三種
2. 關聯式容器(associative containers)
關聯式容器為非線性儲存容器,可以快速搜尋資料,可以用於儲存資料的集合,與鍵值與儲存值(key與value)配對的資料結構,分成set、multiset、map與multimap等四種
3. 配接器(container adapters)
而配接器為序列式容器的變形,只允許特定儲存資料的方向,分成stack、queue與priority_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陣列。