STL學習總結

2021-08-23 14:04:06 字數 2302 閱讀 4096

總結stl中vector,set,multiset,map,multimap,deque,stack,list,queue,priority_queue,string的優缺點以及基本的函式用法。

stl存在的意義就是把c語言中資料結構的很多很多的**封裝成乙個個函式名,方便呼叫,提高效率。

#includevectora;//vector基本上就是陣列二代,擁有陣列的所以功能,還優化了用法。

a.push_back();//尾插

a.insert(a.begin(),b)//最前面插入b

a.erase(a.begin()+1,a.begin()+3)//刪除a[1],a[2],這個用法真的老是記錯呀,區間左閉右開,記住記住記住!

a.clear();

reverse(a.begin(),a.end());//逆序

sort(a.begin(),a.end())//排序

a.size()//長度

a.empty()//判斷是否為空

find()//時間複雜度為o(n)(即將整個向量容器遍歷了一遍)

//用法借助迭代器

vector::iterator it;

it=find(a.begin(),a.end(),b)

it!=a.end()//找到了b

優點:不用定義長度,可逆序,可快排,清空容器簡單clear。

缺點:find不好用,時間複雜度高。erase不好用,刪除元素麻煩。

#include#include#includeusing namespace std;

int main()

和其他的不一樣,這個《是按從小到大排列

struct info

{ string a;

int b;

bool operator < (const info &p)const

{ //按a由小到大排列

return p.a//黑白樹

seta;

a.inset(b);//插入b,插入元素會自動有小到大順序排序

a.erase(b);//刪除b

a.find(b)!=a.end();//找到了b

a.clear();

如果是元素是結構體,需要內部過載排序:(set,multiset,map,multimap用法一樣)

struct info

{ string a;

int b;

bool operator < (const info &p)const

{ //按a由大到小排列

return p.a優點:採用中序遍歷,檢索快,find()時間複雜度低,自動公升序排序,刪除元素簡單。

缺點:不能插入相同元素。有時候這個特性也是優點。

優點:相較於set,允許插入相同的元素,使用刪除函式erase時,返回值為刪除元素的個數。

缺點:使用find函式時,如果查詢的元素有多個,只會返回第乙個重複元素的迭代器位置。

函式用法和set一樣,同樣採用黑白樹結構,唯一不用的只是鍵值後果跟了乙個映照資料,這也是map的亮點呀!

優點:和set一樣,find函式搜尋極快,插入按照鍵值公升序排列,刪除元素簡單,它的結構就是最大的優點。map的查詢是對數時間的。對於2的32次方個元素,只需查詢32次。由此可見map的高效。

缺點嘛目前用著沒毛病。。。

允許插入重複的鍵值。

string s1(s,i,len);這個定義很好用,s是乙個字串,s中下標i到i+len的字元賦值給s1。

s1.find(s2);在s1中查詢s2,如果找到就返回所在的第乙個下標,找不到就返回很大的乙個數,時間複雜度是很高的,比kmp慢很多。

string s1(a.rbegin(),a.rend());這個操作可以把a逆序賦值給s1。

如果你需要乙個搜尋快的結構,當然是選擇黑白樹啦,即可以用map,multimap,set,multiset,而其他的採用線性結構,搜尋時間複雜度就很高。如果你需要乙個插入就排好序的結構,優先佇列priority_queue是首選,其次是map,multimap,set,multiset,如果你需要刪除方便的結構,當然還是選map,multimap,set,multiset。結構內含快排的有list和vector。目前很常用的就是map,priority_queue,set,queue,vector。結構內不含清空函式clear的:stack,queue,priority_queue。其實clear的底層實現是erase(map.begin(),map.end()).所以沒有erase函式就沒有clear函式嘍。

不斷更新中。。。未完待續

STL學習總結

歷時一月左右,基本看完了c 標準庫的原始碼,忽略了一些用處不那麼大的部分,和一些複雜難以理解的演算法 輸入輸出庫,一些複雜的演算法 stable sort,stable partition,inplace merge,list的排序,紅黑樹的調整等 總體而言,收益還是蠻多的,首先了解了stl容器的用...

STL學習總結

stl standard template library,標準模板庫 是惠普實驗室開發的一系列軟體的統稱。stl從廣義上分為 容器 演算法 迭代器,容器和演算法之間通過迭代器進行無縫連線。stl幾乎所有的 都採用了模板類或者模板函式,這相比傳統的由函式和類組成的庫來說提供了更好的 重用機會 stl...

STL學習總結

一.1 什麼是標準模板庫 stl 1 c 標準模板庫與c 標準庫的關係 c 標準模板庫其實屬於c 標準庫的一部分,c 標準模板庫主要是定義了標準模板的定義與宣告,而這些模板主要都是 類模板,我們可以呼叫這些模板來定義乙個具體的類 與之前的自己手動建立乙個函式模版或者是類模板不一樣,我們使用了 stl...