STL總結之順序容器

2021-07-16 05:31:00 字數 1665 閱讀 2882

1. vector

動態確定長度,支援隨機訪問,array是靜態空間。 然後資料結構主要是三個迭代器(普通指標即可):

start:表示目前使用空間的頭

end:表示目前使用空間的尾

end_of_storage: 表示目前可用空間的尾

動態增加大小,並不是在原空間之後接續新空間,而是以原大小的兩倍(不完全是)另外配置一塊較大空間,然後將原內容拷貝過來,並釋放原空間。一旦引起空間的重新配置,指向原vector的所有迭代器就都失效了。

2. list

每次插入和刪除乙個元素,就配置或釋放乙個元素空間,對於任何位置的元素插入和元素移除,list永遠是常數時間。

list的插入操作和結合操作都不會造成原有的list迭代器失效。

list的本身與list的節點不同,list的節點是乙個雙向列表。

3. deque

vector是單向開口的連續性空間,deque則是一種雙向開口的連續性空間。

deque是連續空間(邏輯上是如此的),採用一塊所謂的map作為主控。map是一小塊連續空間,每個元素是指標,指向一段較大的線性空間,稱為緩衝區。map本質是乙個t**,也就說它是乙個指標,所指之物也是乙個指標,指向型別為t的乙個空間。

deque除了維護乙個map的指標外,也維護start,finish兩個迭代器,分別指向第乙個緩衝區的第乙個元素和最後乙個緩衝區的最後乙個元素。它需要記住目前的map大小,因為一旦map所提供的節點不足,就必須重新配置一塊更大的map。

4. vector和deque的區別

deque允許常數時間對投頭端進行元素的插入和移除操作,deque沒有所謂容量的觀念,因為它是動態的以分段連續空間組合而成,隨時可以增加一段新的空間並鏈結起來。

對deque進行排序,為了最高效率,可將deque先完整複製到乙個vector中,然後對vector進行排序後,再複製回deque。  

5. vector,list,deque的訪問,插入與刪除區別

vector適用於隨機訪問,支援,隨機存

取時間為常數;但是在非末尾刪除插入資料時,

效率極低。

list適用於陣列中間頻繁插入刪除資料,其插入刪除開銷低,但是不支援隨機訪問。

deque界於vector和list兩者之間,支援隨機訪問,隊首隊尾插入刪除操作開銷極小。隨機訪問效率接近於vector,隊首隊尾插入刪除接近於list。

6. stack, queue, heap, priority_queue

stack是以deque作為預設情況下的stack底部結構。

queue也是以deque為底部結構並封閉其底端的出口和前端的入口。

heap使用vector表現的完全二叉樹。

priority_queue預設是使用vector為底部容器,再加上heap處理規則實現。

它們都沒有迭代器,然後他們都不能稱為容器,都只能叫做容器配接器。

總結:這個實際不難,很多自己都知道,但是沒有去總結它,然後問的時候就突然愣神了,就沒有回答好,主要還是自己沒掌握好吧。

stl容器之順序容器

stl容器分為順序容器和關聯容器 其中順序容器最常用的由vector,list,queue 1.vector vector 向量容器,可以看作變長陣列,長度可根據需要自行變化。使用的標頭檔案 include 定義方式 vector陣列名 vectorar 訪問容器內資料的方式和普通陣列相同,可以用a...

STL順序容器陣列之vector

向量 動態陣列 標頭檔案 include vectorvec 中放資料型別,vec是變數名 vector vec1 5 乙個大小為5的陣列 vector vec2 5,12 乙個大小為5的陣列,以12填充 定義示例 vector iterator ite 在codeblocks中定義物件時初始化了幾...

STL順序容器之鍊錶

list雙向鍊錶 forward list向前鍊錶 單向 操作都在煉表頭 2011年新標準 略 include list 結構體 變數名 for each ls2.begin ls2.end fun list iterator ite ls2.begin ite 只能 不能 2 3 無容量概念 si...