首页 理论教育 C++STLfor_each算法大道至简

C++STLfor_each算法大道至简

时间:2023-10-25 理论教育 版权反馈
【摘要】:for_each()算法非常灵活,可以非常方便地处理容器中的每一个元素。其函数的定义形式为为:说明:for_each算法用以实现对区间[begin,end]中每个元素均调用进程(或算法)op。2)使用for_each()算法时使用仿函数。3)介绍for_each()算法的返回值。图4-3 例4-3的执行效果总结本小节重点讲述了for_each()算法。通过3个知识点和3个例题,阐释了for_each()算法的使用方法以及仿函数的相关知识和使用技巧。

C++STLfor_each算法大道至简

for_each()算法非常灵活,可以非常方便地处理容器中的每一个元素。其函数的定义形式为为:

978-7-111-51399-5-Chapter04-1.jpg

说明:for_each算法用以实现对区间[begin,end]中每个元素均调用进程(或算法)op。下面用3个例题来讲解for_each()算法的使用方法:

1)for_each()算法的最普通用法。

2)使用for_each()算法时使用仿函数。

3)介绍for_each()算法的返回值

例4-1的功能是实现将向量中的每个元素的值输出到屏幕上。请读者关注代码中的中文注释。

例4-1

978-7-111-51399-5-Chapter04-2.jpg

978-7-111-51399-5-Chapter04-3.jpg

例4-1的执行效果如图4-1所示。

978-7-111-51399-5-Chapter04-4.jpg

图4-1 例4-1的执行效果

例4-2的功能是实现利用仿函数处理容器中每个元素的值。所谓仿函数即使一个类的使用看上去像一个函数。其具体实现是在类中包含operator()函数,之后这个类就有了类似函数的行为,即所谓的仿函数类。当使用类似函数调用形式classname()时,operator()函数被自动执行。

提示:例4-2的倒数第三行代码:

978-7-111-51399-5-Chapter04-5.jpg

在调用上述代码时,首先产生一个Multiple<int>型的临时对象,对象的初始赋值为2,代码实现对容器myvector中的每个元素值均乘以2这一功能。

提示

在实现仿函数时,该类中需要包含operator()函数,之后这个类就具备了类似函数的行为,即所谓的仿函数类。当使用类似函数调用形式classname()时,类中的operator()函数将被自动执行。(www.xing528.com)

仿函数,又称为函数对象,是STL六大组件(容器、配置器、迭代器、算法、配接器和仿函数)之一。仿函数虽然小,但却极大地拓展了算法的功能。几乎所有算法都有仿函数版本。

例4-2

978-7-111-51399-5-Chapter04-6.jpg

978-7-111-51399-5-Chapter04-7.jpg

例4-2的执行效果如图4-2所示。

978-7-111-51399-5-Chapter04-8.jpg

图4-2 例4-2的执行效果

例4-3用来说明如何使用for_each()算法的返回值。具体过程为:首先,定义类SUM;其次,在类SUM中定义operator()函数(intelem),用于计算容器中元素的值的和;最后,用operatordouble()函数返回计算求得的总和。

提示

请读者关注例4-3源代码中的中文注释。

例4-3

978-7-111-51399-5-Chapter04-9.jpg

978-7-111-51399-5-Chapter04-10.jpg

例4-3的执行效果如图4-3所示。

978-7-111-51399-5-Chapter04-11.jpg

图4-3 例4-3的执行效果

总结

小节重点讲述了for_each()算法。通过3个知识点和3个例题,阐释了for_each()算法的使用方法以及仿函数的相关知识和使用技巧。读者应掌握for_each()算法的使用以及for_each()算法的第三个参数采用仿函数的形式、仿函数的调用和仿函数的返回值。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈