Skip to content

標準函式庫 (Standard Template Libiary, STL)

什麼是 STL?

C++ 內建的資料結構,將一些常見寫成模板,可以方便使用。

型態模板 <>

當你要使用容器時,你必須要告訴 C++ 說,你的資料型態是什麼,型態模板的用途就是在於此。 用法: C <T> name 而容器內部東西不會只有一個,像 map 就需要兩種型態。 map <T1, T2> name 有時候參數不須寫滿,不寫滿的地方的值為預設值。

迭代器 (Iterator)

如果你想在容器中遍歷,你可能想用下標運算子 [] ,但不是所有容器都像陣列,都有支援下標運算子,所以 C++ 為每個容器都提供一個資料型態叫 "迭代器",你可以把迭代器當成一種指標,假設有一個迭代器 it,加上星號 * 可以存取 IT 所指向的內容,依據迭代器的強到弱可分為三種:

  • 隨機存取(Random Access):可與整數做 +- 法、遞增及遞減
  • 雙向(Bidirectional)迭代器:遞增及遞減
  • 單向(Forward)迭代器:只能遞增 根據用法可分為兩種:
  • 輸入(Input)迭代器:讀取迭代器指向的內容,所有的迭代器都可以當作輸入迭代器。
  • 輸出(Output)迭代器:更改迭代器指向的內容時,除了常數(const)迭代器(也就是規定不能更動迭代器指向的內容)以外,所有的迭代器都可以當作輸出迭代器。 C++ 在許多容器中提供正向和逆向迭代器,前者由前往後,後著由後往前,宣告時分別為 C::iteratorC::reverse\_iterator ,每種迭代器分別有一對迭代器代表頭尾,如下表,注意 end 系列指向該容器最後一項的後一項,不要對他做人和取值或修改。
正向 逆向
可改值 C.begin(), C.end() C.rbegin(), C.rend()
不可改值 C.cbegin(), C.cend() C.crbegin(),C.crend()