日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

c语言stl模板,c/c++开发分享C++ 标准模板库 STL 顺序容器详解

發(fā)布時(shí)間:2024/9/19 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言stl模板,c/c++开发分享C++ 标准模板库 STL 顺序容器详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。