首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

操作符operator()的疑问,该如何处理

2012-03-04 
操作符operator()的疑问是c++primer上的,我没看懂classabsInt{public:intoperator()(intval){intresultva

操作符operator()的疑问
是c++primer上的,我没看懂
class   absInt   {
public:
    int   operator()(   int   val   )   {
        int   result   =   val   <   0   ?   -   val   :   val;
        return   result;
    }
};
#include   <vector>
#include   <algorithm>
int   main()   {
int   ia[]   =   {   -   0,   1,   -   1,   -   2,   3,   5,   -   5,   8   };
vector <   int   >   ivec(   ia,   ia+8   );
//   把   ivec   的每个元素设置为其绝对值
transform(   ivec.begin(),   ivec.end(),   ivec.begin(),   absInt()   );
//   ....
}

typedef   vector <int> ::iterator   iter_type;
//   transform()   的实例把
//   操作   absInt   应用到   int   型
//   vector   的所有元素上
iter_type   transform(   iter_type   iter,   iter_type   last,
iter_type   result,   absInt   func   )
{
while   (   iter   !=   last   )
*result++   =   func(   *iter++   );   //   调用   absInt::operator()
return   iter;
}

我想知道这句话里:transform(   ivec.begin(),   ivec.end(),   ivec.begin(),   absInt()   );
absInt()   是什么意思,高手指点下啊

[解决办法]
构建一个absInt类型的临时(无名)变量
[解决办法]


transform的作用是把 第一,第二个参数指定的区域内的数据,通过运算(运算规则由第四个参数指定),放入到指定的区域空间内(该空间的首地址由第三个参数指定)

所以
transform( ivec.begin(), ivec.end(), ivec.begin(), absInt() );

把你的向量ievc内的数据,通过absInt()元算(这个例子中是取其绝对值),然后放入到你原来的向量ivec中
[解决办法]
class absInt {
public:
int operator()( int val ) {
int result = val < 0 ? - val : val;
return result;
}
};

那么
absInt abs;
abs.operator()(x);可以这样调用,abs(x);就象调用一个函数一样,称为函数对象.
而transform的第四个参数就要求一个可以这样调用的函数对象.
[解决办法]
构造一个临时的对象,没有取名字

热点排行