程序=数据结构+算法,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的基类,以方便使用.

刚看到这里,下次继续...................

posted on 2006-04-14 16:46 张沈鹏 阅读(373) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理