C 標準模板庫(STL)入門

2021-09-10 21:36:11 字數 3273 閱讀 1787

預處理。需要包含標頭檔案 ,使用標準命名空間 using namespace std。

定義。vector v;typename 為型別名,可以為簡單或自定義型別。

訪問方式。① 和陣列一樣通過下標訪問,v[i] 表示第 i + 1 個元素;②通過迭代器(iterator)訪問,迭代器類似指標,vector :: iterator it 即定義了迭代器 it ,可以通過 *it 訪問 vector 中的元素。auto it = v.begin(),則是定義了指向 vector 第乙個元素的迭代器 it。只有在 vector 和 string 中,可以通過 it + n 得到當前迭代器之後的第 n 個迭代器。

常用函式。push_back(), pop_back(), size(), claer(), insert(), erase() 等。具體用法 visual studio 中會有提示。(ps:vs 宇宙第一ide 的稱號真的是名不虛傳)

常見用途。①儲存不確定元素個數的陣列;②用鄰接表儲存圖。

預處理。需要包含標頭檔案 ,使用標準命名空間 using namespace std。

定義。set s;typename 為型別名,可以為簡單或自定義型別。

訪問方式。只能通過迭代器訪問。迭代器用法和 vector 相同。

特殊之處。set 內的元素自動遞增有序,且自動去除了重複元素。

常用函式。insert(), find(), erase(), size(), clear()。

常見用途。需要自動去重並且按公升序排列的情況。

預處理。需要包含標頭檔案 ,使用標準命名空間 using namespace std。

定義。string s 即可。若需初始化可以使用 string s = "abc"。

訪問方式。① 和陣列一樣通過下標訪問,s[i] 表示第 i + 1 個字元;②通過迭代器(iterator),和 vector 用法相同。

特殊之處。要讀入和輸出整個字串,只能使用 cin 和 cout。如果要使用 scanf 和 printf,可以使用 c_str() 函式將string 轉換為字元陣列或是使用 &s[0],即用第乙個字元的位址代替串。注意使用 scanf 要先用 resize() 函式給 string 分配空間。

常用操作。+, ==, !=, <, <=, >, >=。

常用函式。 length() / size(), insert(), erase(), clear(), substr(), find(), replace()。

string :: npos。這是乙個常數,值為 -1,作為 find() 函式失配時的返回值。

預處理。需要包含標頭檔案 ,使用標準命名空間 using namespace std。

定義。map m, 即定義了從 typename1 (鍵 key)對映到 typename2 (值 value)的 對映 m。不能使用 char 陣列作為鍵。

訪問方式。① 通過下標訪問,m[key] 將得到 key 對映到的值 value,map 中 key 唯一;②通過迭代器(iterator)訪問,和其他容器的迭代器用法相同。

特殊之處。map 內部會以鍵從小到大的順序自動排序。有個疑問,如果自己定義的型別沒有指定大小關係呢?

常用函式。find(), erase(), size(), clear()。

預處理。需要包含標頭檔案 ,使用標準命名空間 using namespace std。

定義。queue q。

訪問方式。q.front() 訪問隊首元素,q.back() 訪問隊尾元素。

常用函式。push(), front(), back(), pop(), empty(), size()。

常見用法。先進先出結構。

預處理。需要包含標頭檔案 ,使用標準命名空間 using namespace std。

定義。priority_queue pq。

訪問方式。只能通過 top() 函式來訪問隊首元素,也就是優先順序最高的元素。

常用函式。push(), top(), pop(), empty(), size()。

優先順序設定。①基本資料型別的優先順序設定:預設是數字大的優先順序高。priority_queue pq 和 priority_queue , less > pq 是等價的,其中 vector 是承載底層資料結構堆(heap)的容器,less 是乙個比較類,less 表示數字大的優先順序大,greater 表示數字小的優先順序大。②結構體的優先順序設定:需要在結構體內部以友元方式過載小於號 <,且只需過載小於號即可。優先順序佇列的優先關係和 sort() 函式中的排序順序恰好是反的。 

常見用途。解決一些貪心問題或是對 dijkstra演算法進行優化。

預處理。需要包含標頭檔案 ,使用標準命名空間 using namespace std。

定義。stack s。

訪問方式。只能通過 top() 函式訪問棧頂元素。

常用函式。push(), top(), pop(), empty(), size()。

常見用法。先進後出結構;模擬實現遞迴等。

預處理。需要包含標頭檔案 ,使用標準命名空間 using namespace std。

定義。pair p,可使用 pair p("haha", 5) 進行定義時初始化。若需要臨時構建 pair,則可以 ① pair ("haha", 5) ②make_pair("haha", 5)

訪問方式。兩個元素分別為 first 和 second,按照正常結構體的方式訪問即可。

常用操作。==, !=, <, <=, >, >=。

常見用法。①代替二元結構體及其建構函式;②作為 map 的鍵對進行插入。

max(), min(), abs()。注意 abs(x) 返回 x 的絕對值,x 必須是整數,若需浮點型的絕對值需使用 math 標頭檔案下的 fabs() 。

swap()。

reverse()。

next_permutation(), 給出乙個序列在全排列的下乙個序列。

fill(), 可以把陣列或容器中的某一段區間賦為某個相同的值。memset() 只能按位元組賦值,而 fill() 按單元賦值,更強大。

sort(), stable_sort(), 很簡單啦。

lower_bound(first, last, val), 用來尋找在有序陣列或容器中 [first, last) 範圍內第乙個值大於等於 val的元素的位置,如果是陣列,返回指標,容器返回迭代器。upper bound(first, last, val), 用來尋找在有序陣列或容器中 [first, last) 範圍內第乙個值大於 val的元素的位置。

C 標準模板庫STL

stl是標準c 庫的一部分。stl模板類為c 提供了完善的資料結構和演算法。stl的特點 型別引數化 即stl的 中可處理任意自定義型別的物件。泛型程式設計 generic programming 它以模板為基礎,弱化了 實體型別的差異,簡化了程式設計時問題抽象的模型,提供了更好的 封裝性和彈性。s...

C 標準模板庫STL

stl 標準模板庫 包括容器,演算法,迭代器 容器用來儲存資料,比如vector,list,堆疊等,string也算 一共有八個 演算法就是對容器進行操作,比如增刪改查資料 迭代器用來遍歷容器itreator 用指標的方式來遍歷容器的資料 注 平時使用的時候大部分時候我們都用上了,但是面試的時候不能...

c (標準模板庫STL)

stl是一種泛型程式設計 generic programming 容器主要有以下分類 例如 容器的成員函式begin 返回指向容器中第乙個元素的迭代器 end 返回指向容器中最後乙個元素後繼位置的迭代器。下面通過stl中提供的乙個泛型函式find 來說明迭代器與泛型演算法的關係 首先看下stl對於f...