程序=数据结构+算法,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的基类,以方便使用.
刚看到这里,下次继续...................