现在的位置: 首页 > 综合 > 正文

STL 之迭代函数解析

2013年02月25日 ⁄ 综合 ⁄ 共 3939字 ⁄ 字号 评论关闭

STL包含了用于迭代容器中元素的方法-迭代方法,包括for_each, transform, copy, find, remove

1、用法:

 

2、细节部分

for_each如何实现的呢, 下面是STL的源码(去除了部分诊断代码)

可以看到,通过迭代容器中的元素,将每个元素作为参数,调用第三个参数(函数指针,注意这里的函数是全局函数)

 

3、对类成员函数的调用,STL函数适配器

如for_each代码所示,只能调用全局函数(ordinary functions)或者函数对象(function objects,请参考STL关于函数对象的描述),那么要对容器中的对象,调用其成员函数,要怎么办呢? 这里STL提供了一种设计方法:适配器(适配器,是一种将两个不能直接交流的物件进行中介的一种中间人,这也是设计里面的一种模式)。

STL提供的适配器包括 ptr_fun, mem_fun, mem_fun_ref。

a) ptr_fun是一个模板函数,返回一个函数对象,该适配器可适配普通函数(ordinary function),请看下面STL关于ptr_fun相关的代码:

 

现在在看一下pointer_to_unary_function的代码,就知道整个调用过程是怎样进行的了:

 注意下面的代码调用效果一样:

ptr_fun为需要对象函数的方法提供适配,例如如下代码:

 

b) mem_fun, 该适配器提供对对象成员函数的调用, 参考一下STL的实现代码:

c) mem_fun_ref, 含义和mem_fun相同, 区别在于mem_fun通过对象指针调用,mem_fun_ref通过对象引用调用, 参考以下STL实现代码:

 

从mem_fun, mem_fun_ref可以学习到如何在对象外部,通过对象指针和对象引用,调用指定类的成员方法。

最后注意:mem_fun用于指针的容器(支持多态的),mem_fun_ref用于对象的容器。

抱歉!评论已关闭.