C++ STL(2)

C++ STL(2)

from my csdn blog

順序性容器

  • 向量 vector

    • 動態(tài)數(shù)組幕垦,創(chuàng)建后會在內存中分配一段連續(xù)的內存空間甥桂。
    • 初始空間大小可以預先指定,當數(shù)據(jù)超過空間時會重新分配一塊內存,將原數(shù)據(jù)拷貝到新的內存塊中桶现,然后銷毀原內存塊中的對象(調用析構函數(shù))彤敛,最后釋放原內存与帆。
    • 所以盡量不要導致重復申請內存,只有預先知道大小的情況下vector性能最優(yōu)墨榄,大多數(shù)情況下vector不是滿存的玄糟。
    • 注意:內部插入刪除效率非常低,頭部也不能插入刪除袄秩,最好創(chuàng)建時指定空間大小阵翎,只能在末尾進行push,pop。
  • 雙向鏈表 list

    • 線性鏈表之剧,若干節(jié)點構成(信息塊+前驅后繼指針)郭卫,無需分配內存大小且可任意伸縮,存儲在非連續(xù)的內存空間中背稼。
    • 隨即檢索性能差贰军,目標元素越靠后,時間越長蟹肘。 < vector
    • 可迅速在任何節(jié)點進行插入刪除词疼,也可以在兩端進行push,pop。 >vector
    • 相對vector帘腹,內存占用更多贰盗。
  • 雙端隊列 deque

    • 優(yōu)化的,對序列兩端元素進行添加刪除的序列容器阳欲,采用多個連續(xù)的存儲塊舵盈,并且在一個映射結構中保存對這些塊和順序的跟蹤陋率。
    • 較為快速的隨機訪問 < vector > list
    • 兩端添加元素開銷小,無需重新分配內存 > vector
    • 可以在內部進行插入和刪除秽晚,性能不如 list
    • 感覺這玩意挺不錯的瓦糟,在需求多情況下,如果不追求效率可以用

關聯(lián)容器

  • set, multiset, map, multimap

    • 非線性結構赴蝇,使用一種高效特殊的平衡檢索二叉樹——紅黑樹(我學過AVL和splay)
  • 集合 set

    • 一組元素的組合狸页,包含的元素值唯一,按一定順序排列
    • 內部通過鏈表的方式組織扯再,插入時比vector塊芍耘,查找和末尾添加比vector慢
  • 多重集合 multiset

    • 與set不同是元素可以不唯一
  • 字典 map

    • 提供 鍵-值 關系一對一的數(shù)據(jù)存儲,鍵不可重復熄阻,且按照一定順序排列斋竞,默認升序排列
    • multimap允許鍵不唯一

區(qū)別

  • 關聯(lián)容器鏈式存儲,vector順序存儲秃殉,插入刪除操作更快坝初。但是比list要慢,list為線性結構钾军,而關聯(lián)容器每次插入刪選需要重新排序鳄袍。

  • 關聯(lián)容器元素檢索比vector慢,比list快很多吏恭,當容器越大時拗小,相對于list的優(yōu)越性更加明顯。

  • 在使用上set 區(qū)別于vector,deque,list 的最大特點就是set 是內部排序的樱哼,這在查詢上雖然遜色于vector 哀九,但是卻大大的強于list 。(有點不大懂)

  • map的功能不可取代搅幅,其他容器無法做到阅束。

容器適配器

  • 容器適配器

    • 棧stack
    • 隊列queue
    • 優(yōu)先隊列priority_queue
  • 不懂的地方,粘過來的

    • 適配器是容器的接口茄唐,它本身不能直接保存元素息裸,它保存元素的機制是調用另一種順序容器去實現(xiàn),即可以把適配器看作“它保存一個容器沪编,這個容器再保存所有元素”呼盆。
    • STL 中提供的三種適配器可以由某一種順序容器去實現(xiàn)。默認下stack 和queue 基于deque 容器實現(xiàn)漾抬,priority_queue 則基于vector 容器實現(xiàn)宿亡。
    • 當然在創(chuàng)建一個適配器時也可以指定具體的實現(xiàn)容器常遂,創(chuàng)建適配器時在第二個參數(shù)上指定具體的順序容器可以覆蓋適配器的默認實現(xiàn)纳令。
    • 由于適配器的特點,一個適配器不是可以由任一個順序容器都可以實現(xiàn)的。
  • 注意事項

    • 棧stack 的特點是后進先出平绩,所以它關聯(lián)的基本容器可以是任意一種順序容器圈匆,因為這些容器類型結構都可以提供棧的操作有求,它們都提供了push_back,pop_backback操作
    • 隊列queue 的特點是先進先出捏雌,適配器要求其關聯(lián)的基礎容器必須提供pop_front操作跃赚,因此其不能建立在vector容器上
    • 優(yōu)先級隊列priority_queue 適配器要求提供隨機訪問功能,因此不能建立在list容器上性湿。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末纬傲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子肤频,更是在濱河造成了極大的恐慌叹括,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宵荒,死亡現(xiàn)場離奇詭異汁雷,居然都是意外死亡,警方通過查閱死者的電腦和手機报咳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門侠讯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人暑刃,你說我怎么就攤上這事厢漩。” “怎么了岩臣?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵袁翁,是天一觀的道長。 經常有香客問我婿脸,道長粱胜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任狐树,我火速辦了婚禮焙压,結果婚禮上抑钟,老公的妹妹穿的比我還像新娘涯曲。我一直安慰自己,他們只是感情好在塔,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布幻件。 她就那樣靜靜地躺著,像睡著了一般蛔溃。 火紅的嫁衣襯著肌膚如雪绰沥。 梳的紋絲不亂的頭發(fā)上篱蝇,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機與錄音徽曲,去河邊找鬼零截。 笑死,一個胖子當著我的面吹牛秃臣,可吹牛的內容都是我干的涧衙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼奥此,長吁一口氣:“原來是場噩夢啊……” “哼弧哎!你這毒婦竟也來了?” 一聲冷哼從身側響起稚虎,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤傻铣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后祥绞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體非洲,經...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年蜕径,在試婚紗的時候發(fā)現(xiàn)自己被綠了两踏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡兜喻,死狀恐怖梦染,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情朴皆,我是刑警寧澤帕识,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站遂铡,受9級特大地震影響肮疗,放射性物質發(fā)生泄漏。R本人自食惡果不足惜扒接,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一伪货、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钾怔,春花似錦碱呼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至矾利,卻和暖如春姑裂,著一層夾襖步出監(jiān)牢的瞬間馋袜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工炭分, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剑肯。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓捧毛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親让网。 傳聞我的和親對象是個殘疾皇子呀忧,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內容