STL庫學習筆記
幾百年前就說要學STL瞭然後現在還沒動呢QAQ
然後謝總髮了個PPT?那就還是學習下趴qwq
首先港下有哪幾個
<vector>[X]
<list>[]
<deque>[]
<set>[X]
<map>[]
<stack>[]
<queue>[]
關於vector
vector,就是個,動態陣列,和普通陣列的差別好像就是沒有限制大小?就可以一直加入一直加入的
通常應用於圖的存邊啥的?
然後介紹下迭代器iterator,話說我當初想學STL就是被這個玩意兒直接嚇跑了呢QAQ
其實就是個指標,*iterator指向數值(這個可以理解為陣列下標就成了?
然後vector中是可以+=k的,意味著快速轉移到某個位置是資瓷的.啊還有就是它還資瓷直接訪問下標的qwq
然後介紹下vector的成員函式們
vector.push_back(data),從尾端加入一個data
vector.size(),返回vector的size
vector.begin() vector.end(),沒什麼可講的,指向開頭結尾的函式,嗷對了end指向的是結尾的後一個元素鴨!
以上幾個好像是所有STL都有的基本成員函式(嗷可能語句不同但是作用都是一樣的qwq)?不多說了qwq
vector.insert(iterator,data),表示在iterator指標前加入一個數值 然後因為vector是分塊儲存的,所以時間複雜度是O(log(size()))的,比普通的陣列就會快些
vector.erase(iterator,iterator)或vector.erase(iterator),表示刪一個區間裡的數或這一個點上的數 因為是分塊儲存所以時間複雜度也是O(log(size()))
vector.clear(),表示把這個陣列清空 但是這個有個要注意的是,此處的clear並不意味著真的把所有元素清空然後釋放記憶體,它只是把size清空了而已,能懂?舉個栗子趴再,就比如我有個vector<int>={1,2,3},clear之後,如果for(to size),是不會有輸出的,但是如果我直接寫的for(to 3)就會輸出"1,2,3" 所以它是O(1)的
vector.remove(iterator,iterator,data),表示把這一段區間的值不是data的按順序提到前面去,並返回不是data的最後一位的後一位(好像是後一位?PPT的表述我沒太懂QAQ) 然後注意一下就是remove和erase結合使用更佳,他們放一塊的話就可以做到把vector中所有數值為data的刪掉的操作,懂?
然後有幾個能用但不是成員函式的東西也港下qwq
一個是sort,對vector也是有用的,用法差不多,不多講了qwq
然後reverse,翻轉操作,也能用,也差不多不多講了qwq(,,,話說我怕是還要開個函式總結?其實reverse的用法我只知道個大概具體怎麼搞也不清楚啊QAQ
最後港下vector比較方式?就字典序比較,從前往後比就是了,完
關於set
set是個好東西鴨!大概港下嗷qwq
它封裝了個賊高階的資料結構,叫紅黑樹,也就是,平衡檢索二叉樹
簡單來說就是它可以自動排序,並且它的所有操作(插入刪除查詢)都是O(log(size()))的,所以跑起來挺快,雖然有點兒常數趴,但是開個O2效率就挺高了
然後關於set先說說幾點注意事項
1)它不能有重複元素,如果要重複元素請移步multiset,聽說用法差不多qwq
2)它不能直接修改內部的元素的值
3)它的iterator只能++--不能+=k,意味著只能一步步挪不能一下跳到某個位置QAQ
4)它不能直接訪問下標
好dei注意事項港完就開始港成員函數了
set.insert(data),在set中插入data,值得注意的是它會先檢索一遍是不是已經存在data瞭如果是就不會插入了qwq(因為,set裡沒有重複元素呢qwq)
set.begin() set.end(),一樣用法不港了
set.rbegin() set.rend(),一個很蛇皮的玩意兒,,,vector.rbegin()=--vector.end() vector.rend()=--vector.begin() 無法理解存在意義?太蛇皮了趴23333333
set.size(),基本操作,複雜度O(1)
set.empty(),同基本操作,複雜度O(1)
set.clear(),依然基本操作,不過複雜度有O(size)呢,,,
set.erase(data)或set.erase(iterator),set有個點在於它是可以刪除某個值也可以刪除某個下標指向的值的蛤,然後如果這個值沒有出現過就直接忽略掉的蛤 複雜度O(log(size()))
set.find(data),在set中找data並返回下標,如果找不到返回set.end()
set.count(data),在set中找data出現的次數,,,這個東西在multiset中可能還有點用,在set中就有點蛇皮了,,,就相當於只是查詢data出現過沒有而已qwq
set.lower_bound() set.upper_bound,這個太基礎不想怎麼講了呢qwq那就不講辣w
講完了?最後說下set和multiset區別蛤
就幾個成員函式的實現有點區別?
erase,multiset會把所有=data都刪了
count,multiset返回的是次數
沒了?歐克結束qwq
關於pair
關於