STL 一些知识点的记录

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()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值