C++ 常用STL容器
阿新 • • 發佈:2022-04-16
內容來源於AcWing yls的部落格
vector(變長陣列),倍增的思想,支援比較運算(按字典序) 定義:: vector <int> a; 定義:一個vector陣列a vector <int> a(10); 定義:一個長度為10的vector陣列a vector <int> a(10,3); 定義:一個長度為10的vector陣列a,並且所有元素都為3 常用函式:: size(); 返回元素個數 empty(); 返回是否是空 clear(); 清空 front(); 返回vector的第一個數 back(); 返回vector的最後一個數 push_back(); 向vector的最後插入一個數 pop_back(); 把vector的最後一個數刪掉 begin(); vector的第0個數 end(); vector的最後一個的數的後面一個數 倍增的思想: 系統為某一程式分配空間是,所需時間,與空間大小無關,與申請次數有關 遍歷方法 假設有個vector <int> a; 第一種: for(int i = 0;i < a.size();i ++) cout<<a[i]<<" "; 第二種: for(vector <int>::iterator i = a.begin();i != a.end();i ++) cout<<*i<<" "; vector <int>::iterator可以寫為auto 第三種: for(auto x : a) cout<<x<<" "; pair,支援比較運算,以first為第一關鍵字,以second為第二關鍵字(按字典序) 定義:: pair <型別,型別> 變數名; 兩個型別可以不同 初始化方式: 假設有個pair <int,string> p; 第一種: p = make_pair(10,"abc"); 第二種: p = {10,"abc"); 常用函式:: first(); 第一個元素 second(); 第二個元素 string(字串) 常用函式:: substr(); 返回每一個子串 c_str(); 返回這個string對應的字元陣列的頭指標 size(); 返回字母個數 length(); 返回字母個數 empty(); 返回字串是否為空 clear(); 把字串清空 queue(佇列) 定義:: queue <型別> 變數名; 常用函式:: size(); 這個佇列的長度 empty(); 返回這個佇列是否為空 push(); 往隊尾插入一個元素 front(); 返回隊頭元素 back(); 返回隊尾元素 pop(); 把隊頭彈出 注意:佇列沒有clear函式!!! 清空: 變數名 = queue <int> (); priority_queue(優先佇列,堆) 注意:預設是大根堆!!! 定義:: 大根堆:priority_queue <型別> 變數名; 小根堆:priority_queue <型別,vecotr <型別>,greater <型別>> 變數名 常用函式: size(); 這個堆的長度 empty(); 返回這個堆是否為空 push();往堆裡插入一個元素 top(); 返回堆頂元素 pop(); 彈出堆頂元素 注意:堆沒有clear函式!!! stack(棧) 常用函式: size(); 這個棧的長度 empty(); 返回這個棧是否為空 push(); 向棧頂插入一個元素 top(); 返回棧頂元素 pop(); 彈出棧頂元素 deque(雙端佇列) 常用函式: size(); 這個雙端佇列的長度 empty(); 返回這個雙端佇列是否為空 clear(); 清空這個雙端佇列 front(); 返回第一個元素 back(); 返回最後一個元素 push_back(); 向最後插入一個元素 pop_back(); 彈出最後一個元素 push_front(); 向隊首插入一個元素 pop_front(); 彈出第一個元素 begin(); 雙端佇列的第0個數 end(); 雙端佇列的最後一個的數的後面一個數 set,map,multiset,multimap 基於平衡二叉樹(紅黑樹),動態維護有序序列 set/multiset 注意:set不允許元素重複,如果有重複就會被忽略,但multiset允許!!! 常用函式: size(); 返回元素個數 empty(); 返回set是否是空的 clear(); 清空 begin(); 第0個數,支援++或--,返回前驅和後繼 end(); 最後一個的數的後面一個數,支援++或--,返回前驅和後繼 insert(); 插入一個數 find(); 查詢一個數 count(); 返回某一個數的個數 erase(); (1)輸入是一個數x,刪除所有x O(k + log n) (2)輸入一個迭代器,刪除這個迭代器 lower_bound(x); 返回大於等於x的最小的數的迭代器 upper_bound(x); 返回大於x的最小的數的迭代器 map/multimap 常用函式: insert(); 插入一個數,插入的數是一個pair erase(); (1)輸入是pair (2)輸入一個迭代器,刪除這個迭代器 find(); 查詢一個數 lower_bound(x); 返回大於等於x的最小的數的迭代器 upper_bound(x); 返回大於x的最小的數的迭代器 unordered_set,unordered_map,unordered_muliset,unordered_multimap 基於雜湊表 和上面類似,增刪改查的時間複雜度是O(1) 不支援lower_bound()和upper_bound() bitset 壓位 定義: bitset <個數> 變數名; 支援: ~,&,|,^ >>,<< ==,!= [] 常用函式: count(); 返回某一個數的個數 any(); 判斷是否至少有一個1 none(); 判斷是否全為0 set(); 把所有位置賦值為1 set(k,v); 將第k位變成v reset(); 把所有位變成0 flip(); 把所有位取反,等價於~ flip(k); 把第k位取反。