類屬編程(generic programming)
generic是構成庫的另一種方式, 這與傳統的oop是不同的.這類程式庫一般由類屬組件和類屬算法組成,組件和算法通過疊代器組裝起來,組件則對疊代器提供一定的封裝.這種程式庫的優點在於能夠提供比傳統程式庫更靈活的組裝方式,而不損失效率.
STL,boost,ACE,ATL等庫都是建構在generic的概念之上.STL對疊代器進行了分類,分類是從支持的功能上的,不同的類屬算法對疊代器有不同的要求.下面對疊代器的種類做一下歸納。
1. Input Iterator(輸入疊代器) : 單向讀取和遍歷.
2. Output Iterator(輸出疊代器):單向寫入和遍歷.
3. Forward Iterator(前向疊代器):單向,讀,寫,支持多路遍歷
4. Bidirectional Iterator(雙向疊代器): 雙向,讀,寫,支持多路遍歷
5. RandomAccessIterator(隨機訪問疊代器):隨機訪問,讀,寫,支持多路遍歷
強化(Refinement) 五種疊代器有一種歸屬關係.1<-2<-3<-4<-5
list容器提供了BidirectionalIterator,因此可以用於find算法(該算法需要InputIterator)
但sort算法(需要RandomAccessIterator),因此下面的代碼不能通過編譯.
list<int> lst;
//... code insert value in lst
sort (lst.begin(), lst.end() ) ; // error!!!
我們知道deque提供了RandomAccessIterator,因此他卻可以使用sort算法,而且能高效運行.