1、容器
前面跟大家介紹過(guò)STL庫(kù),STL主要是由6大部分組成,其中第一個(gè)提到的就是容器,容器在介紹STL中小哥有簡(jiǎn)單的跟大家介紹過(guò),今天稍微再詳細(xì)介紹一下。
首先需要看看STL中常用的一些容器及分類:
所謂容器表面上的意思就是用于容納數(shù)據(jù),存儲(chǔ)數(shù)據(jù)的對(duì)象。
從上圖可以看出,基礎(chǔ)的容器根據(jù)其所存儲(chǔ)數(shù)據(jù)的形式分為順序容器和關(guān)聯(lián)容器。
順序容器當(dāng)然就是數(shù)據(jù)成員順序存儲(chǔ)的形式,是一種線性結(jié)構(gòu),每個(gè)數(shù)據(jù)成員都有固定的位置,所以成員都是按位置來(lái)進(jìn)行存儲(chǔ),類似于C語(yǔ)言中的數(shù)組形式。
關(guān)聯(lián)容器是一種非線性結(jié)構(gòu),沒有嚴(yán)格的順序,主要是按數(shù)值來(lái)進(jìn)行存儲(chǔ),通常通過(guò)迭代器進(jìn)行訪問,迭代器目前可以簡(jiǎn)單理解為"指針"。
2、順序容器
順序容器主要是三種:vector、list和deque
vector向量,其操作方式類似于動(dòng)態(tài)數(shù)組,并且可以像數(shù)組一樣直接進(jìn)行訪問,且通常只在后端進(jìn)行添加與刪除數(shù)據(jù),中間插入效率太低,如果vector向量空間不夠,其會(huì)動(dòng)態(tài)進(jìn)行創(chuàng)建。
list雙向鏈表,該鏈表與我們平常的鏈表數(shù)據(jù)結(jié)構(gòu)類似,其索引性能較差,不能進(jìn)行隨機(jī)數(shù)據(jù)訪問,不像vector可以直接進(jìn)行數(shù)據(jù)訪問,而是需要從頭不斷的進(jìn)行遍歷,但是雙向鏈表list的優(yōu)點(diǎn)在于可以輕松的向鏈表容器中插入數(shù)據(jù)。
deque雙端隊(duì)列屬于vector與list的折中版本,支持這兩者的大部分操作,不過(guò)其性能上都沒有其他兩種基本容器好。
3、關(guān)聯(lián)容器
關(guān)聯(lián)容器主要有四種:map、set、multimap和multiset。
這些關(guān)聯(lián)容器都是基于平衡二叉樹來(lái)實(shí)現(xiàn)的,所以其也是一種鏈?zhǔn)酱鎯?chǔ)方式,不過(guò)相比順序存儲(chǔ)從一條線上擴(kuò)展到了一個(gè)面。
當(dāng)需要在中間插入元素的時(shí)候,對(duì)于vector是最慢的,list當(dāng)然是最快的,而對(duì)于關(guān)聯(lián)容器采用二叉樹結(jié)構(gòu),中間插入元素所要改變的關(guān)系相比vector要少很多,但比list要多一些。
而對(duì)于數(shù)據(jù)元素的檢索,vector無(wú)疑是最快的,list當(dāng)然是最慢的,但對(duì)于關(guān)聯(lián)容器其檢索效果雖然比不過(guò)vector,但由于二叉樹的結(jié)構(gòu)查找速度比list要快很多,所以這也就是set容器的優(yōu)勢(shì)。
而對(duì)于map采用一種key與value的映射關(guān)系,相比vector用數(shù)字下標(biāo)進(jìn)行索引,map能夠提供一種用字符來(lái)索引的功能,這也就是他的特點(diǎn),當(dāng)然也可以理解set是一種key與value相等的map。
而對(duì)于mulitset與multimap僅僅只是在set和map容器的元素唯一性上進(jìn)行了可以不唯一的擴(kuò)展。
4、容器適配器
首先容器適配器并不是容器,而是通過(guò)封裝或限制容器的接口構(gòu)造一些有特殊用途的適配器結(jié)構(gòu)。
STL中主要包含三種適配器:
stack---棧,先進(jìn)后出
queue--隊(duì)列,先進(jìn)先出
priority_queue--優(yōu)先級(jí)隊(duì)列
相比普通隊(duì)列,優(yōu)先級(jí)隊(duì)列在插入時(shí)會(huì)根據(jù)關(guān)鍵詞自動(dòng)排序,出隊(duì)列會(huì)按照排列順序優(yōu)先出隊(duì)列。
這些容器適配器也可以通過(guò)選擇不同的基礎(chǔ)容器來(lái)實(shí)現(xiàn),一般情況下會(huì)選擇默認(rèn)容器來(lái)進(jìn)行適配,當(dāng)然也可以進(jìn)行手動(dòng)修改,但不是每種適配器都可以由任意基礎(chǔ)容器來(lái)進(jìn)行實(shí)現(xiàn),畢竟每種基礎(chǔ)容器存在一些功能上的限制。
最 后
好了,這里小哥就簡(jiǎn)單介紹了STL中的容器和容器適配器的整體介紹,后面會(huì)對(duì)每個(gè)容器舉例介紹,本系列文章后續(xù)還會(huì)更新,記得關(guān)注學(xué)習(xí)哦。
-
容器
+關(guān)注
關(guān)注
0文章
495瀏覽量
22060 -
STL
+關(guān)注
關(guān)注
0文章
86瀏覽量
18319
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論