1. 程式人生 > >STL庫學習筆記

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

關於