關(guān)于模板庫(kù)
模板是C++支持參數(shù)化 多態(tài)的工具劲件,使用模板可以使用戶(hù)為類(lèi)或者函數(shù)聲明一種一般模式峭沦,使得類(lèi)中的某些數(shù)據(jù)成員或者成員函數(shù)的參數(shù)跌造、返回值取得任意類(lèi)型
模板是一種對(duì)類(lèi)型 進(jìn)行參數(shù)化 的工具
通常有兩種形式:函數(shù)模板 和類(lèi)模板
函數(shù)模板針對(duì)僅參數(shù)類(lèi)型 不同的函數(shù)
類(lèi)模板針對(duì)僅數(shù)據(jù)成員 和成員函數(shù)類(lèi)型 不同的類(lèi)
//函數(shù)模板:
template <class 形參名埠胖,class 形參名定罢,......> 返回類(lèi)型 函數(shù)名(參數(shù)列表)
{
函數(shù)體
} //class可以用typename 關(guān)鍵字代替
//如下列:
template <class T> void swap(T& a, T& b){}笤虫;
//如果ab是int數(shù)據(jù)類(lèi)型,T就會(huì)被編譯器推導(dǎo)為int祖凫,模板函數(shù)變?yōu)?void swap(int &a,int &b);
//類(lèi)模板:
template<class 形參名琼蚯,class 形參名,…> class 類(lèi)名
{ ... };
//如下列:
template<class T> class A{public: T a; T b; T swap(T& c, T &d);}
A<int> a;//此時(shí)T被int代替
STL六大部件
STL是一些“容器”的集合惠况,這些“容器”有l(wèi)ist,vector,set,map等
STL可分為容器(containers)遭庶、迭代器(iterators)、空間配置器(allocator)稠屠、適配器(adapters)峦睡、算法(algorithms)翎苫、仿函數(shù)(functors)六個(gè)部分
容器
序列式容器
向量(vector) :連續(xù)存儲(chǔ)的元素<vector>
列表(list) :由節(jié)點(diǎn)組成的雙向鏈表,每個(gè)結(jié)點(diǎn)包含著一個(gè)元素<list>
雙端隊(duì)列(deque): 連續(xù)存儲(chǔ)的指向不同元素的指針?biāo)M成的數(shù)組<deque>
關(guān)聯(lián)式容器
集合 (set) 由節(jié)點(diǎn)組成的紅黑樹(shù)赐俗,每個(gè)節(jié)點(diǎn)都包含著一個(gè)元素拉队,節(jié)點(diǎn)之間以某種作用于元素對(duì)的謂詞排列,沒(méi)有兩個(gè)不同的元素能夠擁有相同的次序 <set>
多重集合 (multiset) 允許存在兩個(gè)次序相等的元素的集合 <set>
映射 (map) 由{鍵阻逮,值}對(duì)組成的集合粱快,以某種作用于鍵對(duì)上的謂詞排列 <map>
多重映射 (multimap) 允許鍵對(duì)有相等的次序的映射 <map>
unordererd_multiset
bucket 籃子就是灰色部分 ,他是用來(lái)裝元素的叔扼, 籃子一定要多
這里的函數(shù)是打印每個(gè)籃子上有多少元素
set
map
迭代器
所有容器中都有專(zhuān)屬的iterator,可以看成指針事哭,將容器頭賦值給iterator,遍歷容器瓜富,不過(guò)這是過(guò)去的做法
分配器
分配器一般不用用戶(hù)寫(xiě)鳍咱,容器有默認(rèn)的分配器
并沒(méi)有必要單獨(dú)使用分配器拿內(nèi)存還內(nèi)存,我們用的是容器
要使用內(nèi)存還是要用new delete方便与柑,使用分配器效率不高
最后編輯于 :2017.12.04 08:17:54
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者