国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++ STL 容器

2019-11-08 01:22:26
字體:
來源:轉載
供稿:網友

容器用來管理一大群元素,STL提供了不同的容器,總的來說可分為三大類:

1.序列式容器(Sequence container)  一種有序集合,其內門每個元素均有確鑿位置——取決于插入時機和地點,與元素值無關。aarray、vector、deque、list和forward_list為STL定義好的5個序列式容器

2.關聯系容器 (Assocaitive container) 一種已排序集合,元素位置取決于其value(或key——如果元素是個key/value pair)和給定的某個排序準則,它們的值決定它們的次序。set、multiset、map和multimap是STL提供的4個關聯式容器

3.無序容器(Unordered(associative) container)  一種無序集合,其內每個元素的位置無關緊要,唯一重要的是某特定元素是否位于此集合內。

1 序列式容器

1.1 Vector

vector將其元素置于一個dynamic array中管理,允許隨機訪問,即可以利用索引直接訪問任何一個元素。在array尾部附加或刪除元素很快速,但在array中段或起始段安插元素比較費時。

1.2 Deque

deuqe 是一個dynamic array,可以向兩端發展,因此不論在尾部還是頭部安插元素都十分迅速。push_front()會將元素安插于集合前端,這種方式的結果是元素排放次序與安插次序相反,因為每個元素都安插于上一個元素的前面。你也可以使用成員函數push_back()在deque尾部附加元素。vector并未提供push_front(),因為其時間效率不佳(在vector頭部安插一個元素需要先移動全部元素)。

1.3 Array

一個array對象乃是在某個固定大小的array內管理元素,因此你不可以改變元素個數,只能改變元素值。你必須在建立時就指明其大小。array也可以隨機訪問元素,只要你指定相應的索引。

1.4 List

list<> 由雙向鏈表(doubly linked list)實現而成,這意味著list內部每個元素都以一部分內存指示其前導元素和后繼元素。list不提供隨機訪問,因此如果你要訪問弟10個元素,你必須沿著鏈表走過前9個元素。List的優勢在于在任何位置上執行安插和刪除動作都非常迅速,因為只需要改變鏈接(link)就好。這表示在list中段移動元素比在vector和deque中快得多。

1.5 Forward List

forward_list<> 是一個由元素構成的單項linked list。就像尋常list那樣,每個元素有自己一段內存,為了節省內存,它只指向下一元素。因此,原則上是一個受限制的list,不支持任何后退移動或效率低下的操作,基于此原因,它不提供成員函數如push_back()乃至size().

2關聯式容器

2.1 Set和Multiset

set元素依據其value自動排序,每個元素只能出現一次不允許重復。而multiset和set唯一的區別就是元素可以重復,也就是它可以包括多個“value相同”的元素。

2.2 Map和multimap

map 每個元素都是以key/value pair,其中key是排序準則的基準。每個key只能出現一次,不能重復。Map也可被視為一種關聯式數組,也就是“索引可為任意類型”的數組。

multimap和map的唯一區別是 元素可以重復,也就是multimap允許其元素擁有相同的key。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 东阳市| 香河县| 富平县| 辽宁省| 鄂托克前旗| 黑山县| 容城县| 美姑县| 黑龙江省| 屯昌县| 阳朔县| 龙里县| 鄂尔多斯市| 麻城市| 金平| 滨州市| 沙坪坝区| 五大连池市| 漯河市| 南华县| 榆树市| 长春市| 长葛市| 高尔夫| 余江县| 阿荣旗| 阜南县| 会泽县| 漯河市| 永吉县| 石台县| 惠州市| 斗六市| 柏乡县| 娄烦县| 五大连池市| 准格尔旗| 贵德县| 高安市| 祁阳县| 察哈|