Algorithms 系列之for_each

本文详细介绍了C++ STL中的for_each模板函数,并通过具体示例展示了如何使用普通的函数和函数对象作为参数来遍历容器。同时,还提供了一个自定义for_each函数的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

     c++其中的有个优势就是在集成和许多工具大家可以直接拿过来直接来使用。

我们经常使用的vector string bitset 等等容器都是一些很基本的模板类,有了模板类对应的就会出现模板函数,也就是众多的算法。今天我们要说的这个算式是for_each。

这个模板函数的含义就是对for循环的一个简单的封装,实际上我们在实际的编码过程中也要学会制作一些普通,共用的工具以方便调用。

         下面有一个使用for_each的实例:

         

运行结果:

 10
 20
 30
10
20
30

我们要使用for_each这个模板函数我们就要引用<algorithm>这个头文件。

for_each的函数声明为

该函数的第三个参数是一个函数类型,对于这个函数我们可以使用两种方式来实现一种就是回调函数模式;另外一种是函数对象的方式

回调函数的模式大家也都知道,在这里也就不多说了。

重点说说这个函数对象,函数对象不是函数指针,但是,在程序代码中,它的调用方式与函数指针一样,后面加个括号就可以了。 函数对象实质上是一个实现了operator()

例如:

      class test{

                    public:

                     int operator()(int a,int b)

                     {

                         return a-b;

                     }

      };

      int main()

{

      test obj;  //define the function object

      obj(5,3)  //the value is 2

      return 0;

}

上面就是一个简单的函数对象的应用实例。当然函数对象还是有它本身许多特性,其中的一个特性就是可以记录上一次保留的数据。进而进行比较操作,有点类似于静态局部变量。如果想了解请参考我之前的总结关于函数对象的应用。

 

我们书归正传,既然这个for_each是一个模板函数我们可以根据其含义自己设置一个。

看下面的代码:

                 

有运行的结果:

 10
 20
 30
10
20
30
我们可以看到结果是一样的。

STL的<algorithm>是集合一些模板函数,当然我们也可以对这些函数进行重载或者改装,但是一般情况下不要去动系统封装的函数,要想实现类似的功能最好是起一个别的名字,动用系统的东西,有时候会出现意想不到的错误。

 

 

 

 

如转载请写明出处,谢谢<http://blog.youkuaiyun.com/lihui130135>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值