450 likes | 594 Vues
資料結構與 C++ 程式設計進階. C++ 標準樣板庫 (STL). 講師:林業峻 CSIE, NTU 5/ 4, 2009. 大綱. 標準樣板庫 (STL) 抽象指標 (Iterator) 容器 (Container) 演算法 (Algorithm). 標準樣板庫 (STL). STL(Standard Template Library) 提供多種 類別樣板與函式樣板 以供使用 由以下三大部分所組成 Iterator: 抽象指標 Container: 容器 ( 類別樣板 ) :
E N D
資料結構與C++程式設計進階 C++標準樣板庫(STL) 講師:林業峻CSIE, NTU5/ 4, 2009
大綱 • 標準樣板庫 (STL) • 抽象指標 (Iterator) • 容器 (Container) • 演算法 (Algorithm)
標準樣板庫 (STL) • STL(Standard Template Library) • 提供多種類別樣板與函式樣板以供使用 • 由以下三大部分所組成 • Iterator: 抽象指標 • Container: 容器 (類別樣板): • vector, list, stack, queue, map,… • Algorithm: 演算法 (函式樣板): • find, sort, count,… • 要訣: • 用某資料結構存放資料 (容器) • 用某演算法操作資料結構 (演算法) • 用某指標表示某容器中之一個資料 (抽象指標)
大綱 • 標準樣板庫 (STL) • 抽象指標 (Iterator) • 容器 (Container) • 演算法 (Algorithm)
抽象指標(Iterator) • 抽象指標是一種可以讓使用者逐一存取容器中元素的工具。 • STL中,各種容器均提供抽象指標做為使用者逐一存取容器中元素管道。 • 宣告抽象指標語法: • 容器::iterator it; • 容器均有提供begin( ),end( )成員函數,讓使用者取得容器的元素開頭與元素結尾的位址。 • 注意! 元素結尾指的是資料的結束(最後一個元素的下一個)
抽象指標(Iterator) • 範例: • 下例中list是STL中的一種容器,使用其中的抽象指標把其中所有內容(元素)印出。 • 優點: • 在結構中找前後一筆資料之程式較為容易實作。
大綱 • 標準樣板庫 (STL) • 抽象指標 (Iterator) • 容器 (Container) • 演算法 (Algorithm)
容器(Containers) • Vector (向量) • 動態陣列,此陣列可任意增長其大小,並提供隨機存取 • List (串列) • 雙向鏈結串列,支援循序雙向存取(無法隨機存取) • Map (映射表) • 支援查表功能之資料結構,資料均以key/value方式存入 • 其他容器… (stack, queue, set…)
向量 vector • vector其特性如同陣列一樣,但又比內建的陣列多了許多好用的功能 • vector可以動態成長,可以將一個vector指定給另一個vector • vector知道自己內含元素的個數。
vector::vector • 範例: 建立一個vector • vector<資料型態> 物件名稱; • vector<資料型態> 物件名稱(長度); • vector<資料型態> 物件名稱(陣列開始位置, 陣列結束位置);
vector::pop_back, push_back • 範例 : 使用vector實作堆疊 (stack)
vector::begin, end • 範例 : 使用抽象指標控制vector
vector::insert • 範例 : 插入資料 • insert(向量插入位置, 資料); • insert(向量插入位置, 陣列開始位置, 陣列結束位置);
vector::erase • 範例 : 移除資料 • erase(向量移除位置); • erase(向量移除開始位置,向量移除結束位置);
串列 list • list其特性主要為實作串列資料結構。
list::list • 範例: 建立一個list • list<資料型態> 物件名稱; • list<資料型態> 物件名稱(陣列開始位置, 陣列結束位置);
list::insert • 範例: 插入節點 • insert(向量插入位置, 資料); • insert(向量插入位置, 陣列開始位置, 陣列結束位置);
list::remove • 範例: 刪除節點 • remove(資料內容);
list::reverse • 範例: 反轉串列 • reverse();
list::merge • 範例: 將一串列合併到另一串列之後 • merge(串列名稱);
映射表 map • map是一種關聯容器,支援查表功能之資料結構,資料均以key/value方式存入 • key: 使用者自訂之索引值 • value: 該索引值內存放之資料
map::map • 範例: 建立一個map • map<key值型態, value型態> 物件名稱;
map::find, erase • 範例: 尋找與刪除 • find(key值); • erase(key值); • erase(位置); • erase(開始位置, 結束位置);
map::insert • 範例: 插入 • insert(map<key值型態, value型態>::value_type(key值, value值);
map::count • 範例: 判斷資料是否存在 • count(key值);
map::lower_bound, upper_bound • 範例: 取得接近下限(上限)之資料 • lower_bound(key值); • lower_upper(key值);
大綱 • 標準樣板庫 (STL) • 抽象指標 (Iterator) • 容器 (Container) • 演算法 (Algorithm)
演算法(Algorithm) • STL中的演算法 • 在STL中除了提供容器(類別樣板), 尚提供演算法(函式樣板)以供操作之資料 • #include <algorithm> • 常用演算法 • find • count • search • merge • sort • for_each • transform
find: 尋找資料 • find(first, last, val) • [first]: 資料開始位置 • [last]: 資料結束位置 • [val]: 目標值 • [回傳值]: 找到資料之位置 • 針對某個容器做搜尋,區間由first及last這兩個位置,目標值為val,找到後回傳其所在元素位置 • 函數模板原型
find • 範例 使用容器 一般陣列
count: 計算資料個數 • count(first, last, val) • [first]: 資料開始位置 • [last]: 資料結束位置 • [val]: 目標值 • [回傳值]: 找到資料之個數 • 針對某個容器做搜尋,區間由first及last這兩個位置,目標值為val,回傳容器中元素值為val的個數 • 函數模板原型
count • 範例
search: 搜尋一段連續資料 • search(s_first, s_last, t_first, t_last) • [s_first]: 來源資料開始位置 • [s_last]: 來源資料結束位置 • [t_first]: 目標資料開始位置 • [t_last]: 目標資料結束位置 • [回傳值]: 找到資料之位置 • 找尋某一資料序列是否出現在另一個容器中 • 函數模板原型
search • 範例:在一般陣列中做搜尋
search • 範例:在STL的vector與list容器中做搜尋
merge: 合併資料 • merge(s1_first, s1_last, s2_first, s2_last, t_first) • [s1_first]: 來源1資料開始位置 • [s1_last]: 來源1資料結束位置 • [s2_first]: 來源2資料開始位置 • [s2_last]: 來源2資料結束位置 • [t_first]: 目標資料之位置 • [回傳值]: 找到資料之位置 • 合併s1與s2兩資料於t • 函數模板原型
merge • 範例:
sort: 資料排序 • sort(first, last) • sort(first, last, f) • [first]: 資料開始位置 • [last]: 資料結束位置 • [f]: 比較函式 • 資料排序 (預設由小到大) • 函數模板原型
sort • 範例:
for_each: 對每個資料做同樣動作 • for_each(first, last, f) • [first]: 資料開始位置 • [last]: 資料結束位置 • [f]: 功能函式 • 對容器中從first 所指的元素起到last為止,其間每一個元素做某個動作(由函數f指定) • 函數模板原型
for_each • 範例:
transform: 對每個資料做同樣動作並放到容量 • transform(first, last, output, f) • [first]: 資料開始位置 • [last]: 資料結束位置 • [output]: 輸出容器 • [f]: 功能函式 • [回傳值]: void • 同for_each,但會把結果放在output容器中 • 函數模板原型
transform • 範例:
STL參考網站 • http://www.cplusplus.com/reference/stl/