久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C++ 容器類簡(jiǎn)介

 mc8949 2011-12-29
C++ 容器類簡(jiǎn)介(摘抄)

C++中的容器類包括“順序存儲(chǔ)結(jié)構(gòu)”和“關(guān)聯(lián)存儲(chǔ)結(jié)構(gòu)”,前者包括vector,,list,,deque等;后者包括set,,map,,multiset,multimap等,。
若需要存儲(chǔ)的元素?cái)?shù)在編譯器間就可以確定,,可以使用數(shù)組來(lái)存儲(chǔ),否則,,就需要用到容器類了,。

1、vector
    連續(xù)存儲(chǔ)結(jié)構(gòu),,每個(gè)元素是在內(nèi)存上是連續(xù)的,;
    支持高效的隨機(jī)訪問(wèn)和在尾端插入/刪除操作,但其他位置的插入/刪除操作效率低下;
2,、deque
    連續(xù)存儲(chǔ)結(jié)構(gòu),,即其每個(gè)元素在內(nèi)存上也是連續(xù)的,類似于vector,,不同之處在于,,deque提供了兩級(jí)數(shù)組結(jié)構(gòu),第一級(jí)完全類似于vector,,代表實(shí)際容器,;另一級(jí)維護(hù)容器的首位地址。
    這樣,,deque除了具有vector的所有功能外,,還支持高效的首端插入/刪除操作。
3,、list
    非連續(xù)存儲(chǔ)結(jié)構(gòu),,具有雙鏈表結(jié)構(gòu),每個(gè)元素維護(hù)一對(duì)前向和后向指針,,因此支持前向/后向遍歷。
    支持高效的隨機(jī)插入/刪除操作,,但隨機(jī)訪問(wèn)效率低下,,且由于需要額外維護(hù)指針,開銷也比較大,。

4,、vector V.S. list V.S. deque:
    a、若需要隨機(jī)訪問(wèn)操作,,則選擇vector,;
    b、若已經(jīng)知道需要存儲(chǔ)元素的數(shù)目,, 則選擇vector,;
    c、若需要隨機(jī)插入/刪除(不僅僅在兩端),,則選擇list
    d,、只有需要在首端進(jìn)行插入/刪除操作的時(shí)候,才選擇deque,,否則都選擇vector,。
    e、若既需要隨機(jī)插入/刪除,,又需要隨機(jī)訪問(wèn),,則需要在vector與list間做個(gè)折中。
    f、當(dāng)要存儲(chǔ)的是大型負(fù)責(zé)類對(duì)象時(shí),,list要優(yōu)于vector,;當(dāng)然這時(shí)候也可以用vector來(lái)存儲(chǔ)指向?qū)ο蟮闹羔槪瑯訒?huì)取得較高的效率,,但是指針的維護(hù)非常容易出錯(cuò),,因此不推薦使用。

5,、capacity V.S size
    a,、capacity是容器需要增長(zhǎng)之前,能夠盛的元素總數(shù),;只有連續(xù)存儲(chǔ)的容器才有capacity的概念(例如vector,,deque,string),,list不需要capacity,。
    b、size是容器當(dāng)前存儲(chǔ)的元素的數(shù)目,。
    c,、vector默認(rèn)的容量初始值,以及增長(zhǎng)規(guī)則是依賴于編譯器的,。

6,、用vector存儲(chǔ)自定義類對(duì)象時(shí),自定義類對(duì)象須滿足:
    a,、有可供調(diào)用的無(wú)參構(gòu)造函數(shù)(默認(rèn)的或自定義的),;
    b、有可用的拷貝賦值函數(shù)(默認(rèn)的或自定義的)

7,、迭代器iterator
    a,、vector與deque的迭代器支持算術(shù)運(yùn)算,list的迭代器只能進(jìn)行++/--操作,,不支持普通的算術(shù)運(yùn)算,。

以下為整個(gè)列表概述:

標(biāo)準(zhǔn)容器類 說(shuō)明
順序性容器
vector 從后面快速的插入與刪除,直接訪問(wèn)任何元素
deque 從前面或后面快速的插入與刪除,,直接訪問(wèn)任何元素
list 雙鏈表,,從任何地方快速插入與刪除
關(guān)聯(lián)容器
set 快速查找,不允許重復(fù)值
multiset 快速查找,,允許重復(fù)值
map 一對(duì)多映射,,基于關(guān)鍵字快速查找,不允許重復(fù)值
multimap 一對(duì)多映射,,基于關(guān)鍵字快速查找,,允許重復(fù)值
容器適配器
stack 后進(jìn)先出
queue 先進(jìn)先出
priority_queue 最高優(yōu)先級(jí)元素總是第一個(gè)出列

所有標(biāo)準(zhǔn)庫(kù)共有函數(shù)

默認(rèn)構(gòu)造函數(shù) 提供容器默認(rèn)初始化的構(gòu)造函數(shù),。
復(fù)制構(gòu)造函數(shù) 將容器初始化為現(xiàn)有同類容器副本的構(gòu)造函數(shù)
析構(gòu)函數(shù) 不再需要容器時(shí)進(jìn)行內(nèi)存整理的析構(gòu)函數(shù)
empty 容器中沒(méi)有元素時(shí)返回true,否則返回false
max_size 返回容器中最大元素個(gè)數(shù)
size 返回容器中當(dāng)前元素個(gè)數(shù)
operator= 將一個(gè)容器賦給另一個(gè)容器
operator< 如果第一個(gè)容器小于第二個(gè)容器,返回true,,否則返回false,,
operator<= 如果第一個(gè)容器小于或等于第二個(gè)容器,返回true,,否則返回false
operator> 如果第一個(gè)容器大于第二個(gè)容器,,返回true,否則返回false
operator>= 如果第一個(gè)容器大于或等于第二個(gè)容器,,返回true,,否則返回false
operator== 如果第一個(gè)容器等于第二個(gè)容器,返回true,,否則返回false
operator!= 如果第一個(gè)容器不等于第二個(gè)容器,,返回true,否則返回false
swap 交換兩個(gè)容器的元素

其中operator>,operator>=,operator<,operator<=,operator==,operator!=均不適用于priority_queue

順序容器和關(guān)聯(lián)容器共有函數(shù)

begin 該函數(shù)兩個(gè)版本返回iterator或const_iterator,,引用容器第一個(gè)元素
end 該函數(shù)兩個(gè)版本返回iterator或const_iterator,引用容器最后一個(gè)元素后面一位
rbegin 該函數(shù)兩個(gè)版本返回reverse_iterator或const_reverse_iterator,引用容器最后一個(gè)元素
rend 該函數(shù)兩個(gè)版本返回reverse_iterator或const_reverse_iterator,,引用容器第一個(gè)元素前面一位
erase 從容器中清除一個(gè)或幾個(gè)元素
clear 清除容器中所有元素

下表顯示了順序容器和關(guān)聯(lián)容器中常用的typedef,這些typedef常用于變量,、參數(shù)和函數(shù)返回值的一般性聲明,。

value_type 容器中存放元素的類型
reference 容器中存放元素類型的引用
const_reference 容器中存放元素類型的常量引用,這種引用只能讀取容器中的元素和進(jìn)行const操作
pointer 容器中存放元素類型的指針
iterator 指向容器中存放元素類型的迭代器
const_iterator 指向容器中存放元素類型的常量迭代器,,只能讀取容器中的元素
reverse_iterator 指向容器中存放元素類型的逆向迭代器,,這種迭代器在容器中逆向迭代
const_reverse_iterator 指向容器中存放元素類型的逆向迭代器,只能讀取容器中的元素
difference_type 引用相同容器的兩個(gè)迭代器相減結(jié)果的類型(list和關(guān)聯(lián)容器沒(méi)有定義operator-)
size_type 用于計(jì)算容器中項(xiàng)目數(shù)和檢索順序容器的類型(不能對(duì)list檢索)

三,、序列類容器

vector


    向量 相當(dāng)于一個(gè)數(shù)組
    在內(nèi)存中分配一塊連續(xù)的內(nèi)存空間進(jìn)行存儲(chǔ)。支持不指定vector大小的存儲(chǔ),。STL內(nèi)部實(shí)現(xiàn)時(shí),,首先分配一個(gè)非常大的內(nèi)存空間預(yù)備進(jìn)行存儲(chǔ),即capacituy()函數(shù)返回的大小,,當(dāng)超過(guò)此分配的空間時(shí)再整體重新放分配一塊內(nèi)存存儲(chǔ),,這給人以vector可以不指定vector即一個(gè)連續(xù)內(nèi)存的大小的感覺(jué)。通常此默認(rèn)的內(nèi)存分配能完成大部分情況下的存儲(chǔ),。
   優(yōu)點(diǎn):(1) 不指定一塊內(nèi)存大小的數(shù)組的連續(xù)存儲(chǔ),,即可以像數(shù)組一樣操作,但可以對(duì)此數(shù)組
               進(jìn)行動(dòng)態(tài)操作,。通常體現(xiàn)在push_back() pop_back()
               (2) 隨機(jī)訪問(wèn)方便,,即支持[ ]操作符和vector.at()
               (3) 節(jié)省空間。
   缺點(diǎn):(1) 在內(nèi)部進(jìn)行插入刪除操作效率低,。
               (2) 只能在vector的最后進(jìn)行push和pop,,不能在vector的頭進(jìn)行push和pop。
               (3) 當(dāng)動(dòng)態(tài)添加的數(shù)據(jù)超過(guò)vector默認(rèn)分配的大小時(shí)要進(jìn)行整體的重新分配、拷貝與釋
                     放

2 list
    雙向鏈表
    每一個(gè)結(jié)點(diǎn)都包括一個(gè)信息快Info,、一個(gè)前驅(qū)指針Pre,、一個(gè)后驅(qū)指針Post??梢圆环峙浔仨毜膬?nèi)存大小方便的進(jìn)行添加和刪除操作,。使用的是非連續(xù)的內(nèi)存空間進(jìn)行存儲(chǔ)。
   優(yōu)點(diǎn):(1) 不使用連續(xù)內(nèi)存完成動(dòng)態(tài)操作,。
               (2) 在內(nèi)部方便的進(jìn)行插入和刪除操作
               (3) 可在兩端進(jìn)行push,、pop
   缺點(diǎn):(1) 不能進(jìn)行內(nèi)部的隨機(jī)訪問(wèn),即不支持[ ]操作符和vector.at()
               (2) 相對(duì)于verctor占用內(nèi)存多

3 deque
   雙端隊(duì)列 double-end queue
   deque是在功能上合并了vector和list,。
   優(yōu)點(diǎn):(1) 隨機(jī)訪問(wèn)方便,,即支持[ ]操作符和vector.at()
               (2) 在內(nèi)部方便的進(jìn)行插入和刪除操作
               (3) 可在兩端進(jìn)行push、pop
   缺點(diǎn):(1) 占用內(nèi)存多

使用區(qū)別:
     1 如果你需要高效的隨即存取,,而不在乎插入和刪除的效率,,使用vector
     2 如果你需要大量的插入和刪除,而不關(guān)心隨即存取,,則應(yīng)使用list
     3 如果你需要隨即存取,,而且關(guān)心兩端數(shù)據(jù)的插入和刪除,則應(yīng)使用deque

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多