STL與泛型編程
一豪墅、STL是什么
STL(Standard TemplateLibrary),即標準模板庫矛纹,是一個具有工業(yè)強度的萎庭,高效的C++程序庫。它被容納于C++標準程序庫(C++ Standard Library)中齿拂,是ANSI/ISO C++標準中最新的也是極具革命性的一部分驳规。該庫包含了諸多在計算機科學領(lǐng)域里所常用的基本數(shù)據(jù)結(jié)構(gòu)和基本算法。為廣大C++程序員們提供了一個可擴展的應(yīng)用框架署海,高度體現(xiàn)了軟件的可復用性吗购。
從邏輯層次來看,在STL中體現(xiàn)了泛型化程序設(shè)計的思想(generic programming)砸狞,引入了諸多新的名詞捻勉,比如像需求(requirements),概念(concept)刀森,模型(model)踱启,容器(container),算法(algorithmn)研底,迭代子(iterator)等埠偿。與OOP(object-oriented programming)中的多態(tài)(polymorphism)一樣,泛型也是一種軟件的復用技術(shù)榜晦;
從實現(xiàn)層次看冠蒋,整個STL是以一種類型參數(shù)化(type parameterized)的方式實現(xiàn)的,這種方式基于一個在早先C++標準中沒有出現(xiàn)的語言特性--模板(template)乾胶。如果查閱任何一個版本的STL源代碼抖剿,你就會發(fā)現(xiàn)朽寞,模板作為構(gòu)成整個STL的基石是一件千真萬確的事情。除此之外斩郎,還有許多C++的新特性為STL的實現(xiàn)提供了方便脑融;
二、STL的六大組件
STL:主要包含6個parts:
容器(Container)孽拷,是一種數(shù)據(jù)結(jié)構(gòu)吨掌,如list,vector脓恕,和deque膜宋,以模板類的方法提供。為了訪問容器中的數(shù)據(jù)炼幔,可以使用由容器類輸出的迭代器(有的容器不含迭代器秋茫,如queue,stack)乃秀;
迭代器(Iterator)肛著,提供了訪問容器中對象的方法。例如跺讯,可以使用一對迭代器指定list或vector中的一定范圍的對象枢贿。迭代器就如同一個指針。事實上刀脏,C++的指針也是一種迭代器局荚。但是,迭代器也可以是那些定義了operator*()以及其他類似于指針的操作符地方法的類對象愈污;
算法(Algorithm)耀态,是用來操作容器中的數(shù)據(jù)的模板函數(shù)。例如暂雹,STL用sort()來對一個vector中的數(shù)據(jù)進行排序首装,用find()來搜索一個list中的對象,函數(shù)本身與他們操作的數(shù)據(jù)的結(jié)構(gòu)和類型無關(guān)杭跪,因此他們可以在從簡單數(shù)組到高度復雜容器的任何數(shù)據(jù)結(jié)構(gòu)上使用仙逻;
仿函數(shù)(Functionobject,仿函數(shù)(functor)又稱之為函數(shù)對象(function object)涧尿,其實就是重載了()操作符的struct桨醋,沒有什么特別的地方
迭代適配器(Adaptor)
空間配制器、分配器(allocator)其中主要工作包括兩部分1.對象的創(chuàng)建與銷毀2.內(nèi)存的獲取與釋放现斋。