effective STL 筆記

STL這塊一直沒有好好總結,開發業務時有時比較急其實有時也沒用好STL的感覺,感覺代碼看起來好醜= = 、決定重新再翻一次這本書總結一下,想到什麼就派生一下,不一定都是書上的內容 (有空就上來更新)
第1條:慎重選擇容器類型
(1)容器的分類
標準STL序列容器:vector,string,deque,list
標準STL關聯容器:set,multiset,map,multimap
非標準序列容器:slist,rope
非標準關聯容器:hash_set,hash_multiset,hash_map,hash_multimap
標準非STL容器:數組,bitset,valarray,stack,queue和priority_queue
(2)序列容器的選擇
vector是默認的序列類型(隨機訪問頻繁),頻繁地在序列中間插入刪除用list,經常在頭部和尾部操作用deque(deque可通過計算數據下標所在位置實現隨機訪問)
(3)選擇
隨機訪問迭代器的容器只有:vector、deque、string
事務語義:只有List實現了,性能有代價
迭代器失效:基於節點的容器插入刪除不會使迭代器指針和引用變無效(除非是正在刪除的元素),而連續型內存容器的插入和刪除一般會失效
string是STL中在swap過程中會導致迭代器、指針和引用變爲無效的唯一容器
deque沒有刪除操作且插入操作只發生在容器末尾,指針和引用不會變爲無效(唯一容器)

第二條:不要試圖編寫獨立於容器類型的代碼
每一種容器都不一樣,提供的接口形式不一樣,沒有通用的適應所有容器的代碼
e.g.
1、序列容器支持push_front和push_back,關聯容器則不能
2、關聯容器提供對數時間的lower_bound,upper_bound和equal_range的成員函數(序列容器只能使用algorithm裏面單獨提供的,切需要排序好),也只有關聯容器提供count函數
3、關聯容器和序列容器erase接口不一樣,且序列容器需要處理迭代器失效的問題,遍歷刪除需要注意!!!!
4、序列容器中,list和deque沒有reserve和capacity的操作,sort,stable_sort,partial_sort和nth_element要求必須隨機訪問迭代器,所以list不適用,list本身提供了sort成員函數(穩定排序)
5、vector沒有find,string find系列函數find(),rfind(),find_first_of(),find_last_of(),find_first_not_of(),find_last_not_of()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章