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