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...