STL容器的實現原理

List封裝了鏈表,Vector封裝了數組, list和vector得最主要的區別在於vector使用連續內存存儲的,他支持下標訪問,而list是以鏈表形式實現的,不支持下標訪問。


Vector對於隨機訪問的速度很快,但是對於插入尤其是在頭部插入元素速度很慢,在尾部插入速度很快。List對於隨機訪問速度慢得多,因爲可能要遍歷整個鏈表才能做到,但是對於插入就快的多了,不需要拷貝和移動數據,只需要改變指針的指向就可以了。


Map,Set屬於標準關聯容器,使用了非常高效的平衡檢索二叉樹:紅黑樹,他的插入刪除效率比其他序列容器高是因爲不需要做內存拷貝和內存移動,而直接替換指向節點的指針即可,最好和最壞都是logn。


Set和Vector的區別在於Set不包含重複的數據。Set和Map的區別在於Set只含有Key,而Map有一個Key和Key所對應的Value兩個元素。


Map和Hash_Map的區別是Hash_Map使用了Hash算法來加快查找過程(Map使用二叉查找樹,效率log n和二分查找一樣),但是需要更多的內存來存放這些Hash桶元素,因此可以算得上是採用空間來換取時間策略。

發佈了52 篇原創文章 · 獲贊 10 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章