STL之序列式容器 一 什麼是序列式容器

2021-10-04 20:59:05 字數 4184 閱讀 3115

序列容器以線性序列的方式儲存元素。它沒有對元素進行排序,元素的順序和儲存它們的順序相同。一般來說,有 5 種標準的序列容器,每種容器都具有不同的特性:

現在我們來說說序列式容器到底是什麼。

所謂序列容器,即以線性排列(類似普通陣列的儲存方式)來儲存某一指定型別(例如 int、double 等)的資料,需要特殊說明的是,該類容器並不會自動對儲存的元素按照值的大小進行排序。

需要注意的是,序列容器只是一類容器的統稱,並不指具體的某個容器,序列容器大致包含以下幾類容器:

注意,其實除此之外,stack和 queue本質上也屬於序列容器,只不過它們都是在 deque 容器的基礎上改頭換面而成,通常更習慣稱它們為容器介面卡,有關它們的介紹,會放到後續章節中。

表 2 展示了 array、vector 和 deque 容器的函式成員,它們中至少有兩個容器實現了同樣的函式成員。

表 2 array、vector 和 deque 容器的函式成員

函式成員

函式功能

array

vector

deque

begin()

返回指向容器中第乙個元素的迭代器。是是

是end()

返回指向容器最後乙個元素所在位置後乙個位置的迭代器,通常和 begin() 結合使用。是是

是rbegin()

返回指向最後乙個元素的迭代器。是是

是rend()

返回指向第乙個元素所在位置前乙個位置的迭代器。是是

是cbegin()

和 begin() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用於修改元素。是是

是cend()

和 end() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用於修改元素。是是

是crbegin()

和 rbegin() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用於修改元素。是是

是crend()

和 rend() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用於修改元素。是是

是assign()

用新元素替換原有內容。-是

是operator=()

複製同型別容器的元素,或者用初始化列表替換現有內容。是是

是size()

返回實際元素個數。是是

是max_size()

返回元素個數的最大值。這通常是乙個很大的值,一般是 232-1,所以我們很少會用到這個函式。是是

是capacity()

返回當前容量。-是

-empty()

判斷容器中是否有元素,若無元素,則返回 true;反之,返回 false。是是

是resize()

改變實際元素的個數。-是

是shrink _to_fit()

將記憶體減少到等於當前元素實際所使用的大小。-是

是front()

返回第乙個元素的引用。是是

是back()

返回最後乙個元素的引用。是是

是operator

使用索引訪問元素。是是

是at()

使用經過邊界檢查的索引訪問元素。是是

是push_back()

在序列的尾部新增乙個元素。-是

是insert()

在指定的位置插入乙個或多個元素。-是

是emplace()

在指定的位置直接生成乙個元素。-是

是emplace_back()

在序列尾部生成乙個元素。-是

是pop_back()

移出序列尾部的元素。-是

是erase()

移出乙個元素或一段元素。-是

是clear()

移出所有的元素,容器大小變為 0。-是

是swap()

交換兩個容器的所有元素。是是

是data()

返回指向容器中第乙個元素的指標。是是

-列表中 - 表明對應的容器並沒有定義這個函式。

list 和 forward_list 容器彼此非常相似,forward_list 中包含了 list 的大部分成員函式,而未包含那些需要反向遍歷的函式。表 3 展示了 list 和 forward_list 的函式成員。

表 3 list 和 forward_list 的函式成員

函式成員

函式功能

list

forward_list

begin()

返回指向容器中第乙個元素的迭代器。是是

end()

返回指向容器最後乙個元素所在位置後乙個位置的迭代器。是是

rbegin()

返回指向最後乙個元素的迭代器。是-

rend()

返回指向第乙個元素所在位置前乙個位置的迭代器。是-

cbegin()

和 begin() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用於修改元素。是是

before_begin()

返回指向第乙個元素前乙個位置的迭代器。-是

cbefore_begin()

和 before_begin() 功能相同,只不過在其基礎上,增加了 const 屬性,即不能用該指標修改元素的值。-是

cend()

和 end() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用於修改元素

。 是是

crbegin()

和 rbegin() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用於修改元素。是-

crend()

和 rend() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用於修改元素。是-

assign()

用新元素替換原有內容。是是

operator=()

複製同型別容器的元素,或者用初始化列表替換現有內容。是是

size()

返回實際元素個數。是-

max_size()

返回元素個數的最大值,這通常是乙個很大的值,一般是 232-1,所以我們很少會用到這個函式。是是

resize()

改變實際元素的個數。是是

empty()

判斷容器中是否有元素,若無元素,則返回 true;反之,返回 false。是是

front()

返回容器中第乙個元素的引用。是是

back()

返回容器中最後乙個元素的引用。

是 -push_back()

在序列的尾部新增乙個元素。

是 -push_front()

在序列的起始位置新增乙個元素。是是

emplace()

在指定位置直接生成乙個元素。

是 -emplace_after()

在指定位置的後面直接生成乙個元素。-是

emplace_back()

在序列尾部生成乙個元素。是-

cmplacc_front()

在序列的起始位生成乙個元索。是是

insert()

在指定的位置插入乙個或多個元素。是-

insert_after()

在指定位置的後面插入乙個或多個元素。-是

pop_back()

移除序列尾部的元素。是-

pop_front()

移除序列頭部的元素。是是

reverse()

反轉容器中某一段的元素。是是

erase()

移除指定位置的乙個元素或一段元素。

是 -erase_after()

移除指定位置後面的乙個元素或一段元素。-是

remove()

移除所有和引數匹配的元素。是是

remove_if()

移除滿足一元函式條件的所有元素。是是

unique()

移除所有連續重複的元素。是是

clear()

移除所有的元素,容器大小變為 0。是是

swap()

交換兩個容器的所有元素。是是

sort()

對元素進行排序。是是

merge()

合併兩個有序容器。是是

splice()

移動指定位置前面的所有元素到另乙個同型別的 list 中。是-

splice_after()

移動指定位置後面的所有元素到另乙個同型別的 list 中。-是

STL序列式容器之deque

deque是一種雙向開口的連續線性空間,所謂雙向是指可以在首尾兩端進行插入和刪除,邏輯結構如圖所示 deque和vector最大的差異在於deque可以在常數時間內對頭端進行插入和刪除操作,而且deque沒有容量的概念,隨時可以增加一段新的空間並鏈結起來。除非必要,應盡量使用vector而非dequ...

STL序列式容器之vector

序列式容器 序列式容器 可序列集群,其中的元素都可序,但未必有序。vector概述 vector的資料安排以及操作方式,與array非常相似。兩者的唯一差別在於空間的運用的靈話性,array 是靜態空間,一旦配置了就不能改變 要換個大 或小 一點的房子,可以,一切瑣細得由客戶端自己來 首先配置一塊新...

STL序列式容器之deque

deque概述 vector是單向開口的連續線性空間,deque則是一種雙向開口的連續線性空間。所謂雙向開口,意思是可以在頭尾兩端分別做元素的插入和刪除操作。vector當然也可以在頭尾兩端分別做元素的插入刪除操作 從技術上說 但是其頭部操作效率極差而無法被接受。deque和vector的最大差異,...