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