STL基本用法總結
阿新 • • 發佈:2022-03-31
STL基本用法總結
目錄vector
- 元素訪問:
- [ ]
- 下標訪問
- 迭代器訪問(解引用迭代器)
- front()
- back()
- [ ]
- 容量
- size()
- empty()
- 修改器
- clear():從容器擦除所有元素
- push_back()
- pop_back()
- insert(pos , val):pos為待插入位置的迭代器——可以是尾後迭代器,val為待插入值
- erase():
- erase(pos):移除位於
pos
的元素 - erase(first , last)移除範圍
[first; last)
中的元素,如果first和last相等,區間為空不刪除元素
- erase(pos):移除位於
pair
- 成員物件
- first
- second
- 構造pair
- pair<int , string> p( 1 , "str" );
- pair<int , string> p = { 1 , "str" };
- pair<int , string> p = make_pair( 1 , "str" );
- 臨時pair
- pair<int , string> ( 1 , "str" );
- make_pair( 1 , "str" );
- 支援比較運算,以first為第一關鍵字,second為第二關鍵字(字典序)
deque
string
- 輸入輸出
- cin cout
- getline(輸入流 , string物件)
- printf("%s\n" , str.c_str()) c_str()可以返回string物件儲存字元陣列的首地址
- 容量
- size
- empty
- 支援比較運算子 按字典序
- 訪問與修改
- +/+= 拼接兩個字串(可以與字串字面值相加)
- insert()
- insert(pos , str):在pos位置(下標)插入字串str,str可以是string類物件也可以是字串常量
- insert(it , it2 , it3):在it(迭代器)處插入[it2 , it3) ,it2 ,it3分別是待插入字串的首尾迭代器
- erase()
- erase(it)
- erase(first , last):引數為迭代器,左開右閉
- erase(pos , length):引數1為下標, 2為刪除長度
- substr(pos , length)
- 返回從pos下標開始,長度為length的子串
- 如果無第二個引數,輸出至尾
- 若pos+length-1超出下標範圍,同樣輸出至尾
- clear()
set / multiset
set中無重複元素,multiset可以有
預設升序排序,若想降序:set<int, greater<int>> s
- insert(key):插入一個數,自動遞增排序
- find(key):查詢一個數,找到對應迭代器。找不到則返回尾後迭代器
- count(key):返回值為key的元素數(set只有0或1)
- erase()
- erase(key):刪除所有值為key的
- erase(iter):刪除這個迭代器對應元素
- erase(first , last)
- lower_bound(key) :返回指向首個不小於給定鍵的元素的迭代器
- upper_bound(key):返回指向首個大於給定鍵的元素的迭代器
- 其他
- clear()
- size()
- empty()
- 迭代器支援++ --
map / multimap
- insert():插入的是一個pair
- find(key):返回指向鍵等於 key的元素的迭代器。若找不到這種元素,則返回尾後迭代器。
- erase()
- erase(key):刪除鍵為key的元素
- erase(iter):刪除這個迭代器對應的元素
- erase(first , last)
- 元素訪問
- 使用[ ]通過下標訪問:如mp[ 'c' ] = 10
- 使用迭代器:it->first , it->second
- count(key):返回匹配特定鍵的元素數量
- lower_bound(key):返回指向首個不小於給定鍵的元素的迭代器
- upper_bound(key):返回指向首個大於給定鍵的元素的迭代器
- 其他
- clear()
- size()
- empty()
- 迭代器支援++ --
unordered_set / unordered_multiset
unordered_map / unordered_multimap
與前面類似,不過前面是使用紅黑樹作為底層實現,此處底層實現為雜湊表。
增刪改查O(1)
不支援lower_bound() , upper_bound()
迭代器支援++,不支援--
容器介面卡queue
- 元素訪問
- front()
- back()
- 修改器
- push()
- pop()
- 容量
- empty()
- size()
容器介面卡stack
- 元素訪問
- top()
- 修改器
- push()
- pop()
- 容量
- empty()
- size()
容器介面卡priority_queue(優先佇列/堆)
預設情況下會建立大根堆,若想建立小根堆priority_queue<int , vector<int> , greater<int>> heap;
-
引數2是承載底層資料結構堆的容器(因為元素型別是int,所以是vector
) -
引數3是對引數1的比較類
- std::greater()
- greater是第一個元素是否比第二個元素更大,如果是返回true否則返回false
- 按greater規則排序會使前一個元素比後一個更大(例如a和b按某規則cmp比較,返回true的話a就排前面)
- 解釋:例如小根堆,我們想要新插入元素(在最低層)比其父節點大,那麼使用greater規則。greater(newnode , father)
- std::greater()
-
元素訪問
- top()
-
修改器
- push()
- pop()
-
容量
- empty()
- size()