STL 基本容器

2022-09-08 07:30:08 字數 1484 閱讀 2639

1.順序容器與關聯容器

c++中有兩種型別的容器:順序容器和關聯容器,順序容器主要有:vector、list、deque等。其中vector表示一段連續的記憶體位址,基於陣列的實現,list表示非連續的記憶體,基於鍊錶實現。deque與vector類似,但是對於首元素提供刪除和插入的雙向支援。關聯容器主要有map和set。map是key-value形式的,set是單值。map和set只能存放唯一的key值,multimap和multiset可以存放多個相同的key值。

2.順序容器

(1) vector

內部資料結構:陣列。

隨機訪問每個元素,所需要的時間為常量。

在末尾增加或刪除元素所需時間與元素數目無關,在中間或開頭增加或刪除元素所需時間隨元素數目呈線性變化。

可動態增加或減少元素,記憶體管理自動完成,但程式設計師可以使用reserve()成員函式來管理記憶體。

vector的迭代器在記憶體重新分配時將失效(它所指向的元素在該操作的前後不再相同)。當把超過capacity()-size()個元素插入vector中時,記憶體會重新分配,所有的迭代器都將失效;否則,指向當前元素以後的任何元素的迭代器都將失效。當刪除元素時,指向被刪除元素以後的任何元素的迭代器都將失效。

(2)deque

內部資料結構:陣列。

隨機訪問每個元素,所需要的時間為常量。

在開頭和末尾增加元素所需時間與元素數目無關,在中間增加或刪除元素所需時間隨元素數目呈線性變化。

可動態增加或減少元素,記憶體管理自動完成,不提供用於記憶體管理的成員函式。

增加任何元素都將使deque的迭代器失效。在deque的中間刪除元素將使迭代器失效。在deque的頭或尾刪除元素時,只有指向該元素的迭代器失效。

(3)list

內部資料結構:雙向環狀鍊錶。

不能隨機訪問乙個元素。

可雙向遍歷。

在開頭、末尾和中間任何地方增加或刪除元素所需時間都為常量。

可動態增加或減少元素,記憶體管理自動完成。

增加任何元素都不會使迭代器失效。刪除元素時,除了指向當前被刪除元素的迭代器外,其它迭代器都不會失效。

3.關聯容器

與之前的順序容器有別的是,關聯容器在儲存時是以關鍵字key為下標進行儲存的,標準的stl關聯容器分為set和map兩大類,之後的衍生版本有multiset和multimap,它們的區別是在儲存時是否容許出現關鍵字key相同的情況。這些容器的底層機制均以rb-tree(紅黑樹)完成。

關聯容器有以下四種:set、multiset、map、multimap。

4.成員函式

(1)共有: size()   元素個數,empty()    是否為空;

(2)其他:begin     開頭的迭代器;

end       末尾元素後乙個位置的迭代器;

pop       彈出元素;

top/front     stack/queue 中的首個元素;

back       queue 中隊尾元素;

clear       從容器中刪除所有元素。

String用法(STL基本容器)

string c 標準庫中的string表示可變長的字串,它在標頭檔案string裡面。include string using std string 直接初始化和拷貝初始化 string s1 初始化字串,空字串 string s2 s1 拷貝初始化,深拷貝字串 string s3 i am b ...

STL容器比較和基本操作

stl不同容器的優缺點 verctor vector類似於c語言中的陣列,它維護一段連續的記憶體空間,具有固定的起始位址,因而能非常方便地進行隨機訪問,即 操作符,但因為它的記憶體區域是連續的,所以在它中間插入或刪除某個元素,需要複製並移動現有的元素。此外,當被插入的記憶體空間不夠時,需要重新申請一...

Vector的用法(STL基本容器)

vector vector是陣列的一種類表示,它提供了自動記憶體管理功能,可以動態地改變vector物件的長度,並隨著元素的新增和刪除而增大縮小,它提供了對元素的隨機訪問,在尾部新增和刪除元素的時間是固定的,但在頭部或中間插入和刪除元素的複雜度為線性時間。除序列外,vector還是可反轉容器 vec...