程序=數據結構+算法,STL實現了算法與數據結構的分離(解耦合,decouple).
?? 一 iterator
stl中算法通過iterator作用于數據的線性區間(linear range).
iterator是類似于指針的東東.它有幾種不同的類型(不是C++語言中的類型,是一種concept(約定)),分別提供各種層次的功能,以滿足不同算法的需要.
比如:
input iterator
支持:
?== * ++
不支持:
?= -- > <
?mutlipass(多次歷遍)
?同時擁有兩個input iterator(不知道術語是什么,望大俠賜教)
等等,可以參見<泛形編程與STL>.
iterator_traits是用來定義iterator的指向物的數據類型的(聽說0x標準會增加typeof,有了typeof是不是可以簡化一下???who can tell me?).
iterator_traits中還有一項iterator_category,是一個空類的typedef,用來標識iterator的類型(如input iterator).
可以配合函數的重載,針對不同類型的iterator,寫其最有效率的算法.
?
?? 二 函數對象(function object)
"羊吃草"可以理解"將羊這個函數對象 通過吃這種算法 作用于草這個區間".
function object相當于羊,通過替換function object為牛,馬,我們可以實現不同的目的(比如羊吃草是為了產毛,牛吃草是為了耕地,馬吃草為了趕路).
function object中有一類叫做adaptable function object,它們作用類似iterator_traits,不過沒有單獨寫成一個object.他們通過了自身參數和返回值的typedef.
可以用于function object adapter中,比如一個作用類似于"!"(not)的function object adapter.
stl中通過adaptable function object的基類,以方便使用.
剛看到這里,下次繼續...................
只有注冊用戶登錄后才能發表評論。 | ||
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
![]() |
||
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|