程序=數(shù)據(jù)結(jié)構(gòu)+算法,STL實(shí)現(xiàn)了算法與數(shù)據(jù)結(jié)構(gòu)的分離(解耦合,decouple).
?? 一 iterator
stl中算法通過iterator作用于數(shù)據(jù)的線性區(qū)間(linear range).
iterator是類似于指針的東東.它有幾種不同的類型(不是C++語言中的類型,是一種concept(約定)),分別提供各種層次的功能,以滿足不同算法的需要.
比如:
input iterator
支持:
?== * ++
不支持:
?= -- > <
?mutlipass(多次歷遍)
?同時(shí)擁有兩個(gè)input iterator(不知道術(shù)語是什么,望大俠賜教)
等等,可以參見<泛形編程與STL>.
iterator_traits是用來定義iterator的指向物的數(shù)據(jù)類型的(聽說0x標(biāo)準(zhǔn)會增加typeof,有了typeof是不是可以簡化一下???who can tell me?).
iterator_traits中還有一項(xiàng)iterator_category,是一個(gè)空類的typedef,用來標(biāo)識iterator的類型(如input iterator).
可以配合函數(shù)的重載,針對不同類型的iterator,寫其最有效率的算法.
?
?? 二 函數(shù)對象(function object)
"羊吃草"可以理解"將羊這個(gè)函數(shù)對象 通過吃這種算法 作用于草這個(gè)區(qū)間".
function object相當(dāng)于羊,通過替換function object為牛,馬,我們可以實(shí)現(xiàn)不同的目的(比如羊吃草是為了產(chǎn)毛,牛吃草是為了耕地,馬吃草為了趕路).
function object中有一類叫做adaptable function object,它們作用類似iterator_traits,不過沒有單獨(dú)寫成一個(gè)object.他們通過了自身參數(shù)和返回值的typedef.
可以用于function object adapter中,比如一個(gè)作用類似于"!"(not)的function object adapter.
stl中通過adaptable function object的基類,以方便使用.
剛看到這里,下次繼續(xù)...................