c语言stl模板,c/c++开发分享C++ 标准模板库 STL 顺序容器详解
c++ 標(biāo)準(zhǔn)模板庫(kù) stl 順序容器
容器
順序性
重復(fù)性
支持迭代器
vector
動(dòng)態(tài)數(shù)組
無(wú)序
可重復(fù)
隨機(jī)訪問(wèn)迭代器
deque
雙向隊(duì)列
無(wú)序
可重復(fù)
隨機(jī)訪問(wèn)迭代器
list
雙向鏈表
無(wú)序
可重復(fù)
雙向迭代器
動(dòng)態(tài)數(shù)組 vector
? vector #include 動(dòng)態(tài)數(shù)組:其元素在內(nèi)存中是連續(xù)存放的,隨機(jī)存取任何元素都可以在常數(shù)時(shí)間內(nèi)完成,在該容器的尾部增刪元素也幾乎能夠在常數(shù)時(shí)間內(nèi)完成具有較好的性能。
? 一個(gè) vector 常用函數(shù)使用實(shí)例如下:
%
構(gòu)造函數(shù)
函數(shù)
函數(shù)描述
vector
構(gòu)造函數(shù)創(chuàng)建一個(gè) vector,可以設(shè)定大小
vector(const vector&)
拷貝構(gòu)造函數(shù),可以對(duì)區(qū)間內(nèi)另一個(gè)數(shù)組的元素進(jìn)行拷貝
operator=
將新內(nèi)容分配給容器,替換其當(dāng)前內(nèi)容,并相應(yīng)地修改其大小
assign
將新內(nèi)容分配給 vector,替換其當(dāng)前內(nèi)容,并相應(yīng)地修改其 size
容量管理函數(shù)
函數(shù)
函數(shù)描述
size
返回容器中元素的數(shù)量
max_size
返回容器可容納的最大元素?cái)?shù)
resize
調(diào)整容器的大小,使其包含 n(參數(shù))個(gè)元素
capacity
返回當(dāng)前為 vector 分配的存儲(chǔ)空間(容量)的大小
empty
返回 vector 是否為空
reserve
請(qǐng)求 vector 容量至少足以包含 n(參數(shù))個(gè)元素
s
要求容器減小其 capacity(容量)以適應(yīng)其 size(元素?cái)?shù)量)
增刪函數(shù)
函數(shù)
函數(shù)描述
push_back
在容器的最后一個(gè)元素之后添加一個(gè)新元素
pop_back
刪除容器中的最后一個(gè)元素,有效地將容器 size 減少一個(gè)
insert
通過(guò)在指定位置的元素之前插入新元素來(lái)擴(kuò)展該容器,通過(guò)插入元素的數(shù)量有效地增加容器大小
erase
從 vector 中刪除單個(gè)元素(position)或一系列元素([first,l),這有效地減少了被去除的元素的數(shù)量,從而破壞了容器的大小
clear
從 vector 中刪除所有的元素(被銷毀),留下 size 為 0 的容器
emplace
通過(guò)在 position(參數(shù))位置處插入新元素 args(參數(shù))來(lái)擴(kuò)展容器
emplace_back
在 vector 的末尾插入一個(gè)新的元素,緊跟在當(dāng)前的最后一個(gè)元素之后
索引函數(shù)
函數(shù)
函數(shù)描述
operator[]
返回容器中第 n(參數(shù))個(gè)位置的元素的引用
at
返回容器中第 n(參數(shù))個(gè)位置的元素的引用
front
返回對(duì)容器中第一個(gè)元素的引用
back
返回對(duì)容器中最后一個(gè)元素的引用
data
返回指向容器中第一個(gè)元素的指針
迭代器函數(shù)
函數(shù)
函數(shù)描述
begin
返回指向容器中第一個(gè)元素的迭代器
end
返回指向容器中最后一個(gè)元素之后的理論元素的迭代器
rbegin
返回指向容器中最后一個(gè)元素的反向迭代器
rend
返回一個(gè)反向迭代器,指向中第一個(gè)元素之前的理論元素
cbegin
返回指向容器中第一個(gè)元素的常量迭代器(const_iterator)
cend
返回指向容器中最后一個(gè)元素之后的理論元素的常量迭代器(const_iterator)
crbegin
返回指向容器中最后一個(gè)元素的常量反向迭代器(const_reverse_iterator)
crend
返回指向容器中第一個(gè)元素之前的理論元素的常量反向迭代器(const_reverse_iterator)
用 vector 實(shí)現(xiàn)二維數(shù)組
#include #include using namespace std; int main(){ vector> arr(3); // arr中有 3 個(gè)元素,每個(gè)元素都是 vector 容器 for(int i=0; i
雙向隊(duì)列 deque
? deque #include 雙向隊(duì)列:其元素在內(nèi)存中是連續(xù)存放的,隨機(jī)存取任何元素都可以在常數(shù)時(shí)間內(nèi)完成,在該容器的兩端增刪元素也幾乎能夠在常數(shù)時(shí)間內(nèi)完成具有較好的性能。
? 所有適用于 vector 的操作都適用于 deque,除此之外,deque 還有 push_front / pop_front 在最前端插入或刪除元素的操作,復(fù)雜的都是 o ( 1 ) o(1) o(1) 。
函數(shù)
函數(shù)描述
deque
構(gòu)造函數(shù)
push_back
在容器的末尾添加一個(gè)新元素
push_front
在容器的開(kāi)頭插入一個(gè)新元素
pop_back
刪除容器中的最后一個(gè)元素,同時(shí)將容器大小減少一個(gè)
pop_front
刪除容器中的第一個(gè)元素,同時(shí)將容器大小減少一個(gè)
emplace_front
在容器的開(kāi)頭插入一個(gè)新的元素
emplace_back
在容器的末尾插入一個(gè)新的元素
雙向鏈表 list
? list #include 雙向鏈表:其元素在內(nèi)存中是不連續(xù)存放的,不支持隨機(jī)存取,在該容器的任何位置增刪元素幾乎都能夠在常數(shù)時(shí)間內(nèi)完成具有較好的性能。
? list 除了具有所有順序容器都有的成員函數(shù)之外,還支持以下8個(gè)成員函數(shù):
函數(shù)
函數(shù)描述
push_front
在容器的開(kāi)頭插入一個(gè)新元素
pop_front
刪除容器中的第一個(gè)元素
sort
元素排序,值得注意的是 list 不支持 stl 算法中的 sort
remove
刪除和指定值相等的所有元素
unique
刪除所有和前一個(gè)元素相同的元素,使得元素不重復(fù),使用之前需要sort
merge
合并兩個(gè)鏈表,并清空被合并的那個(gè)鏈表
reverse
顛倒鏈表內(nèi)容
splice
在指定位置前面插入另一鏈表中的一個(gè)或多個(gè)元素,并在該鏈表中刪除這些元素
? 一個(gè) list 的成員函數(shù)使用實(shí)例如下:
#include #include #include using namespace std; class a{ private: int n; public: a(int n_){n = n_;} friend bool operator void printlist(t start, t end){ for(;start != end; ++start){ cout << *start << ','; } cout << endl; } int main(){ list lst1, lst2; lst1.push_back(1); lst1.push_back(3); lst1.push_back(2); lst1.push_back(4); lst1.push_back(2); lst2.push_back(10); lst2.push_back(50); lst2.push_back(30); lst2.push_back(30); lst2.push_back(40); lst2.push_back(40); lst2.push_back(30); lst2.push_back(20); cout << "1) "; printlist(lst1.begin(),lst1.end()); cout << "2) "; printlist(lst2.begin(),lst2.end()); lst2.sort(); // 調(diào)用 sort 成員函數(shù)進(jìn)行 lst2 排序 cout << "3) "; printlist(lst2.begin(),lst2.end()); lst2.unique(); // 刪除 lst2 中所有和前一個(gè)元素相等的元素 cout << "4) "; printlist(lst2.begin(),lst2.end()); lst2.pop_front(); // 將 lst2 的第一個(gè)元素刪除 cout << "5) "; printlist(lst2.begin(),lst2.end()); lst1.remove(2); // 刪除 lst1 中所有值為 2 的元素 cout << "6) "; printlist(lst1.begin(),lst1.end()); lst2.merge(lst1); // 將 lst1 中的元素合并到 lst2 并將 lst1 清空 cout << "7) "; printlist(lst2.begin(),lst2.end()); lst2.reverse(); // 顛倒 lst2 cout << "8) "; printlist(lst2.begin(),lst2.end()); lst1.push_back(100); lst1.push_back(200); lst1.push_back(300); lst1.push_back(400); cout<::iterator p1,p2,p3; p1 = find(lst2.begin(),lst2.end(),4); p2 = find(lst1.begin(),lst1.end(),200); p3 = find(lst1.begin(),lst1.end(),400); lst2.splice(p1,lst1,p2,p3); // 將 lst1 中 [p2,p3) 區(qū)間內(nèi)的元素插入到 lst2 中 p1 位置之前,并將這些元素從 lst1 中刪除 cout<
到此這篇關(guān)于c++ 標(biāo)準(zhǔn)模板庫(kù) stl 順序容器詳解的文章就介紹到這了,更多相關(guān)c++ 標(biāo)準(zhǔn)模板庫(kù) stl 內(nèi)容請(qǐng)
本文來(lái)自網(wǎng)絡(luò)收集,不代表猴子技術(shù)宅立場(chǎng),如涉及侵權(quán)請(qǐng)點(diǎn)擊右邊聯(lián)系管理員刪除。
如若轉(zhuǎn)載,請(qǐng)注明出處:https://www.ssfiction.com/c-cyuyankaifa/595536.html
總結(jié)
以上是生活随笔為你收集整理的c语言stl模板,c/c++开发分享C++ 标准模板库 STL 顺序容器详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: win10录屏功能怎么开启win10怎么
- 下一篇: QT使用xsl将xml为html,使用x