c++ primer 之-------操作符operator()

class absInt {

    public:

          int operator() (int val) {

             int result = val < 0 ? -val : val;

             return result;

          }
 };

 

 重载的operator()必须被声明为成员函数,它的参数表可以有任意数据的参数,而参数类型可以是给出被作为函数参数的任何类型。重载的operator()的返回值可以是作为函数返回值类型的任何类型。

 

#include <vector>

#include <algorithm>

 

int main()

{

    int ia[] = { -0,1,-1,-2,3,5,-5,8};

    vector< int > ivec(ia, ia+8);

 

    //把ivec的每个元素设置为其绝对值

    tranform(ivec.begin(), ivec.end(), ivec.begin(), absInt());

   //......

}

 

transform()的第一个和第二个实参指示了absInt操作被应用的元素范围。第三个实参指向“被用来存储absInt操作结果的向量”的开始。

 

transfrom()的第四个实参是一个absInt类的临时对象,它通过调用absInt的缺省构造函数来创建。main()调用的泛型算法transfrom的实例看起来像这样:

typedef vector<int>::iterator iter_type;

 

iter_type transform(iter_type iter, iter_type las, iter_type result, absInt func)

{

    while(iter != last)

        *result++ = func(*iter++);//调用absInt::operator()

    return iter;

}

 

func是一个类类型的对象,它的类型代表了absInt操作,该操作把int型的值设置为其绝对值。对象func被用来调用absInt类的重载的opertor()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值