mem_fun 还可以这样写 mem_fun<Result,x>
for_each(v1.begin(), v1.end(), mem_fun<int, StoreVals>(&StoreVals::squareval)); equal to for_each(v1.begin(), v1.end(), mem_fun(&StoreVals::squareval));
自动型别转换,感觉落下好多知识啊,加油。
#include"t.h"
using namespace std;
class MeanValue{
private:
long num;
long sum;
public:
MeanValue():num(0),sum(0){
}
void operator() (int elem){
num++;
sum += elem;
}
operator double(){
return static_cast<double>(sum)/static_cast<double>(num);
}
operator int(){
return 10;
}
operator float(){
return 0.9999;
}
};
void main()
{
vector<int> coll;
INSERT_ELEMENTS(coll,1,8);
double mv = for_each(coll.begin(),coll.end(),
MeanValue());
cout<<mv;
MeanValue stst;
int x = stst;
float dx = stst;
cout<<x<<dx;
}
一个对象stst为什么就能赋值给int x呢????????待解!-----类型转换 http://blog.sina.com.cn/s/blog_507fc2360100cswi.html
1. C++中关键字operator除了提供运算符重载之外,还提供类型转换能力。
例如:
class A::operator int() {
...
}
可以将*this对象转化为int类型。这是C++中一个非常重要的特性,也比较
复杂,以下是一些规则,篇幅所限不便展开,建议你找有关书籍全面了解。
简单规则如下:
1)所有类型转换函数均无返回类型声明,但返回一个值,其类型应与声明吻合。
2)在运行中要求进行隐式类型转换时,对象按上下文需求调用相应的类型转换函数,
自动转化为该类型。
3)如果在客户代码中使用了强制类型转换,则类必须提供相应的类型转换函数。
简单地说,如果程序中有 (long)obj 语句,你必须显式提供 operator long(),
只提供 operator int(), 然后指望obj先转换为int,再自动转换为 long,那
是行不通的。
4)如果类定义了一系列类型转换函数,而在客户代码中有含义不清的上下文,也就是
说多个类型转换函数都可以满足需求,则编译器会因为不知道该调用那个类型转换
函数而报错。
不能在没有元素的空容器上调用fill_n函数,如 fill_n(coll.begin(),3,"sdf");运行时会出错,如果coll为空的话,可以先调用resize()。