List和vector

1莱预、vector與list區(qū)別

vector為存儲的對象分配一塊連續(xù)的地址空間拦耐,因此對vector中的元素隨機(jī)訪問效率很高。在vecotor中插入或者刪除某個元素,需要將現(xiàn)有元素進(jìn)行復(fù)制箱硕,移動。如果vector中存儲的對象很大悟衩,或者構(gòu)造函數(shù)復(fù)雜剧罩,則在對現(xiàn)有元素進(jìn)行拷貝時開銷較大,因為拷貝對象要調(diào)用拷貝構(gòu)造函數(shù)座泳。對于簡單的小對象惠昔,vector的效率優(yōu)于list。vector在每次擴(kuò)張容量的時候挑势,將容量擴(kuò)展2倍镇防,這樣對于小對象來說,效率是很高的潮饱。

list中的對象是離散存儲的来氧,隨機(jī)訪問某個元素需要遍歷list。在list中插入元素香拉,尤其是在首尾插入元素啦扬,效率很高,只需要改變元素的指針凫碌。

綜上所述:

vector適用:對象數(shù)量變化少扑毡,簡單對象,隨機(jī)訪問元素頻繁

list適用:對象數(shù)量變化大盛险,對象復(fù)雜瞄摊,插入和刪除頻繁

最大的區(qū)別是,list是雙向的,而vector是單向的枉层。

因此在實際使用時泉褐,如何選擇這三個容器中哪一個,應(yīng)根據(jù)你的需要而定鸟蜡,一般應(yīng)遵循下面

的原則:

1膜赃、如果你需要高效的隨即存取,而不在乎插入和刪除的效率揉忘,使用vector

2跳座、如果你需要大量的插入和刪除,而不關(guān)心隨即存取泣矛,則應(yīng)使用list

3疲眷、如果你需要隨即存取,而且關(guān)心兩端數(shù)據(jù)的插入和刪除您朽,則應(yīng)使用deque狂丝。

vector?? 表示一段連續(xù)的內(nèi)存區(qū)域换淆,每個元素被順序存儲在這段內(nèi)存中,對vector?? 的隨機(jī)訪問效率很高几颜,但對非末尾元素的插入和刪除則效率非常低倍试。

deque

也表示一段連續(xù)的內(nèi)存區(qū)域,但與vector不同的是它支持高效地在其首部插入和刪除元素蛋哭,它通過兩級數(shù)組結(jié)構(gòu)來實現(xiàn)县习,一級表示實際的容器,第二級指向容器的首和尾

list?? 表示非連續(xù)的內(nèi)存區(qū)域并通過一對指向首尾元素的指針雙向鏈接起來谆趾,插入刪除效率高躁愿,隨機(jī)訪問效率低

2)stl提供了三個最基本的容器:vector,list,deque。

vector和built-in數(shù)組類似沪蓬,它擁有一段連續(xù)的內(nèi)存空間彤钟,并且起始地址不變,因此

它能非常好的支持隨即存取怜跑,即[]操作符样勃,但由于它的內(nèi)存空間是連續(xù)的,所以在中間

進(jìn)行插入和刪除會造成內(nèi)存塊的拷貝性芬,另外,當(dāng)該數(shù)組后的內(nèi)存空間不夠時剧防,需要重新

申請一塊足夠大的內(nèi)存并進(jìn)行內(nèi)存的拷貝植锉。這些都大大影響了vector的效率。

list就是數(shù)據(jù)結(jié)構(gòu)中的雙向鏈表(根據(jù)sgi ? stl源代碼)峭拘,因此它的內(nèi)存空間可以是不連續(xù)

的俊庇,通過指針來進(jìn)行數(shù)據(jù)的訪問,這個特點使得它的隨即存取變的非常沒有效率鸡挠,因此它

沒有提供[]操作符的重載辉饱。但由于鏈表的特點,它可以以很好的效率支持任意地方的刪除

和插入拣展。

deque是一個double-ended ? queue彭沼,它的具體實現(xiàn)不太清楚,但知道它具有以下兩個特點:

它支持[]操作符备埃,也就是支持隨即存取姓惑,并且和vector的效率相差無幾,它支持在兩端的

操作:push_back,push_front,pop_back,pop_front等按脚,并且在兩端操作上與list的效率

也差不多于毙。

因此在實際使用時,如何選擇這三個容器中哪一個辅搬,應(yīng)根據(jù)你的需要而定唯沮,一般應(yīng)遵循下面

的原則:

1、如果你需要高效的隨即存取,而不在乎插入和刪除的效率介蛉,使用vector

2萌庆、如果你需要大量的插入和刪除,而不關(guān)心隨即存取甘耿,則應(yīng)使用list

3踊兜、如果你需要隨即存取,而且關(guān)心兩端數(shù)據(jù)的插入和刪除佳恬,則應(yīng)使用deque捏境。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市毁葱,隨后出現(xiàn)的幾起案子垫言,更是在濱河造成了極大的恐慌,老刑警劉巖倾剿,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筷频,死亡現(xiàn)場離奇詭異,居然都是意外死亡前痘,警方通過查閱死者的電腦和手機(jī)凛捏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芹缔,“玉大人坯癣,你說我怎么就攤上這事∽钋罚” “怎么了示罗?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長芝硬。 經(jīng)常有香客問我蚜点,道長,這世上最難降的妖魔是什么拌阴? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任绍绘,我火速辦了婚禮,結(jié)果婚禮上皮官,老公的妹妹穿的比我還像新娘脯倒。我一直安慰自己,他們只是感情好捺氢,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布藻丢。 她就那樣靜靜地躺著,像睡著了一般摄乒。 火紅的嫁衣襯著肌膚如雪悠反。 梳的紋絲不亂的頭發(fā)上残黑,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機(jī)與錄音斋否,去河邊找鬼梨水。 笑死,一個胖子當(dāng)著我的面吹牛茵臭,可吹牛的內(nèi)容都是我干的疫诽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼旦委,長吁一口氣:“原來是場噩夢啊……” “哼奇徒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缨硝,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤摩钙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后查辩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胖笛,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年宜岛,在試婚紗的時候發(fā)現(xiàn)自己被綠了长踊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡萍倡,死狀恐怖之斯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遣铝,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布莉擒,位于F島的核電站酿炸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏涨冀。R本人自食惡果不足惜填硕,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鹿鳖。 院中可真熱鬧扁眯,春花似錦、人聲如沸翅帜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涝滴。三九已至绣版,卻和暖如春胶台,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背杂抽。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工诈唬, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缩麸。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓铸磅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親杭朱。 傳聞我的和親對象是個殘疾皇子阅仔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 前言: 詳細(xì)介紹: List:元素有放入順序,元素可重復(fù)Map:元素按鍵值對存儲唁桩,無放入順序Set:元素?zé)o放入順序...
    YBshone閱讀 8,620評論 0 17
  • 標(biāo)簽(空格分隔): STL 運(yùn)用STL闭树,可以充分利用該庫的設(shè)計,讓我為簡單而直接的問題設(shè)計出簡單而直接的解決方案荒澡,...
    認(rèn)真學(xué)計算機(jī)閱讀 1,470評論 0 10
  • 容器的概念所謂STL容器报辱,即是將最常運(yùn)用的一些數(shù)據(jù)結(jié)構(gòu)(data structures)實現(xiàn)出來。容器是指容納特定...
    飯飯H閱讀 378評論 0 0
  • vector的特點: (1)指定一塊如同數(shù)組一樣的連續(xù)存儲单山,但空間可以動態(tài)擴(kuò)展碍现。即它可以像數(shù)組一樣操作,并且可以進(jìn)...
    jazzi閱讀 606評論 0 2
  • 煙雨氤氳米奸,夢回幽幽 燭曳舞昼接,影兒躍 淅淅瀝瀝,窗幾淚痕生 朦朦朧朧悴晰,詩畫舞輕盈 癡醉與沉睡 自得其樂的世界 假象慢睡,太迷人
    清水檸檬蜂蜜茶閱讀 134評論 0 0