操作符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的第四个参数就要求一个可以这样调用的函数对象.
[解决办法]
构造一个临时的对象,没有取名字