容器是在項目中常見的資料結構,不僅僅在C++中,很多語言都有封裝了類似STL的模闆庫。因為我選擇的是C++方向,是以今天就簡單從C++的角度聊一聊模闆中vector和list的差别。
求職面試的時候基礎題目大都會考vector和list的差别,如果你答不上來,那麼印象會很糟糕,因為這是差別大學生和一個從業多年的重要名額,大學生在校其實用這種資料結構的場合不多,大都數要畢業之後做項目才經常要使用STL,boot這些第三方庫,是以大都不會自己造輪子,直接新手拈來。
我覺得如果能這樣答就基本可以了。從記憶體來看,vector的記憶體空間是連續的,你完全可以當成數組使用,支援[]操作符也就是下标索引存取高效,但是插入和删除的效率低,當記憶體不夠時會重新申請足夠大的記憶體并進行記憶體拷貝,請注意是足夠大的記憶體,我就碰到不要臉的面試官問我一倍夠大嗎,這個時候你要提醒自己不要跳坑,而申請和拷貝大塊記憶體是非常影響效率的,是以如果是資料量龐大,用vector就是一個錯誤的選擇;
list是雙向連結清單結構,它的空間是不連續的,通過指針來通路,這樣的資料結構決定了不能通過下标索引,但是優點就是插入和删除效率特别高。
如果能從一些資料再深入闡明vector和list的性能就完美了。比如說插入性能對比,多少資料時vector耗時會是list的多少倍,也是以決定了在什麼場合更适合list。如果是一些高并發分布式的場合,那麼list的用處肯定是更多的,以前就碰到幾百萬條資料