STL 之迭代函数解析

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用于对象的容器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值