1 / 44

講師:林業峻 CSIE, NTU 5/ 4, 2009

資料結構與 C++ 程式設計進階. C++ 標準樣板庫 (STL). 講師:林業峻 CSIE, NTU 5/ 4, 2009. 大綱. 標準樣板庫 (STL) 抽象指標 (Iterator) 容器 (Container) 演算法 (Algorithm). 標準樣板庫 (STL). STL(Standard Template Library) 提供多種 類別樣板與函式樣板 以供使用 由以下三大部分所組成 Iterator: 抽象指標 Container: 容器 ( 類別樣板 ) :

efrem
Download Presentation

講師:林業峻 CSIE, NTU 5/ 4, 2009

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 資料結構與C++程式設計進階 C++標準樣板庫(STL) 講師:林業峻CSIE, NTU5/ 4, 2009

  2. 大綱 • 標準樣板庫 (STL) • 抽象指標 (Iterator) • 容器 (Container) • 演算法 (Algorithm)

  3. 標準樣板庫 (STL) • STL(Standard Template Library) • 提供多種類別樣板與函式樣板以供使用 • 由以下三大部分所組成 • Iterator: 抽象指標 • Container: 容器 (類別樣板): • vector, list, stack, queue, map,… • Algorithm: 演算法 (函式樣板): • find, sort, count,… • 要訣: • 用某資料結構存放資料 (容器) • 用某演算法操作資料結構 (演算法) • 用某指標表示某容器中之一個資料 (抽象指標)

  4. 大綱 • 標準樣板庫 (STL) • 抽象指標 (Iterator) • 容器 (Container) • 演算法 (Algorithm)

  5. 抽象指標(Iterator) • 抽象指標是一種可以讓使用者逐一存取容器中元素的工具。 • STL中,各種容器均提供抽象指標做為使用者逐一存取容器中元素管道。 • 宣告抽象指標語法: • 容器::iterator it; • 容器均有提供begin( ),end( )成員函數,讓使用者取得容器的元素開頭與元素結尾的位址。 • 注意! 元素結尾指的是資料的結束(最後一個元素的下一個)

  6. 抽象指標(Iterator) • 範例: • 下例中list是STL中的一種容器,使用其中的抽象指標把其中所有內容(元素)印出。 • 優點: • 在結構中找前後一筆資料之程式較為容易實作。

  7. 大綱 • 標準樣板庫 (STL) • 抽象指標 (Iterator) • 容器 (Container) • 演算法 (Algorithm)

  8. 容器(Containers) • Vector (向量) • 動態陣列,此陣列可任意增長其大小,並提供隨機存取 • List (串列) • 雙向鏈結串列,支援循序雙向存取(無法隨機存取) • Map (映射表) • 支援查表功能之資料結構,資料均以key/value方式存入 • 其他容器… (stack, queue, set…)

  9. 向量 vector • vector其特性如同陣列一樣,但又比內建的陣列多了許多好用的功能 • vector可以動態成長,可以將一個vector指定給另一個vector • vector知道自己內含元素的個數。

  10. vector::vector • 範例: 建立一個vector • vector<資料型態> 物件名稱; • vector<資料型態> 物件名稱(長度); • vector<資料型態> 物件名稱(陣列開始位置, 陣列結束位置);

  11. vector::pop_back, push_back • 範例 : 使用vector實作堆疊 (stack)

  12. vector::begin, end • 範例 : 使用抽象指標控制vector

  13. vector::insert • 範例 : 插入資料 • insert(向量插入位置, 資料); • insert(向量插入位置, 陣列開始位置, 陣列結束位置);

  14. vector::erase • 範例 : 移除資料 • erase(向量移除位置); • erase(向量移除開始位置,向量移除結束位置);

  15. 串列 list • list其特性主要為實作串列資料結構。

  16. list::list • 範例: 建立一個list • list<資料型態> 物件名稱; • list<資料型態> 物件名稱(陣列開始位置, 陣列結束位置);

  17. list::insert • 範例: 插入節點 • insert(向量插入位置, 資料); • insert(向量插入位置, 陣列開始位置, 陣列結束位置);

  18. list::remove • 範例: 刪除節點 • remove(資料內容);

  19. list::reverse • 範例: 反轉串列 • reverse();

  20. list::merge • 範例: 將一串列合併到另一串列之後 • merge(串列名稱);

  21. 映射表 map • map是一種關聯容器,支援查表功能之資料結構,資料均以key/value方式存入 • key: 使用者自訂之索引值 • value: 該索引值內存放之資料

  22. map::map • 範例: 建立一個map • map<key值型態, value型態> 物件名稱;

  23. map::find, erase • 範例: 尋找與刪除 • find(key值); • erase(key值); • erase(位置); • erase(開始位置, 結束位置);

  24. map::insert • 範例: 插入 • insert(map<key值型態, value型態>::value_type(key值, value值);

  25. map::count • 範例: 判斷資料是否存在 • count(key值);

  26. map::lower_bound, upper_bound • 範例: 取得接近下限(上限)之資料 • lower_bound(key值); • lower_upper(key值);

  27. 大綱 • 標準樣板庫 (STL) • 抽象指標 (Iterator) • 容器 (Container) • 演算法 (Algorithm)

  28. 演算法(Algorithm) • STL中的演算法 • 在STL中除了提供容器(類別樣板), 尚提供演算法(函式樣板)以供操作之資料 • #include <algorithm> • 常用演算法 • find • count • search • merge • sort • for_each • transform

  29. find: 尋找資料 • find(first, last, val) • [first]: 資料開始位置 • [last]: 資料結束位置 • [val]: 目標值 • [回傳值]: 找到資料之位置 • 針對某個容器做搜尋,區間由first及last這兩個位置,目標值為val,找到後回傳其所在元素位置 • 函數模板原型

  30. find • 範例 使用容器 一般陣列

  31. count: 計算資料個數 • count(first, last, val) • [first]: 資料開始位置 • [last]: 資料結束位置 • [val]: 目標值 • [回傳值]: 找到資料之個數 • 針對某個容器做搜尋,區間由first及last這兩個位置,目標值為val,回傳容器中元素值為val的個數 • 函數模板原型

  32. count • 範例

  33. search: 搜尋一段連續資料 • search(s_first, s_last, t_first, t_last) • [s_first]: 來源資料開始位置 • [s_last]: 來源資料結束位置 • [t_first]: 目標資料開始位置 • [t_last]: 目標資料結束位置 • [回傳值]: 找到資料之位置 • 找尋某一資料序列是否出現在另一個容器中 • 函數模板原型

  34. search • 範例:在一般陣列中做搜尋

  35. search • 範例:在STL的vector與list容器中做搜尋

  36. 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 • 函數模板原型

  37. merge • 範例:

  38. sort: 資料排序 • sort(first, last) • sort(first, last, f) • [first]: 資料開始位置 • [last]: 資料結束位置 • [f]: 比較函式 • 資料排序 (預設由小到大) • 函數模板原型

  39. sort • 範例:

  40. for_each: 對每個資料做同樣動作 • for_each(first, last, f) • [first]: 資料開始位置 • [last]: 資料結束位置 • [f]: 功能函式 • 對容器中從first 所指的元素起到last為止,其間每一個元素做某個動作(由函數f指定) • 函數模板原型

  41. for_each • 範例:

  42. transform: 對每個資料做同樣動作並放到容量 • transform(first, last, output, f) • [first]: 資料開始位置 • [last]: 資料結束位置 • [output]: 輸出容器 • [f]: 功能函式 • [回傳值]: void • 同for_each,但會把結果放在output容器中 • 函數模板原型

  43. transform • 範例:

  44. STL參考網站 • http://www.cplusplus.com/reference/stl/

More Related