C++11中initializer_list的用法

/*  initializer_list 是C++11新增的,可以使用它来初始化STL:
           例如:std::vector<double> payments {45.9,39.3,19.59,89.1};
		   上述声明与下述代码等价(这里显式的将列表指定为构造函数参数):
		   std::vector<double> payments ({45.9,39.3,19.59,89.1});
		
在C++11 可以使用 {} 而不是 () 来 调用类的构造函数:
           shared_ptr<double> pd{new double};   //ok to use {} instead of () 

*/

/*   提供initializer_list 类的初衷,旨在能够将一系列的值换递给构造函数或其他函数。
     注意:initializer_list 的迭代器类型为const,因此不能修改initializer_list中的值。 
    即不能这么做:
            *dl.begin() = 20.0;    错误做法。 
    但可以将一个initializer_list 赋给另一个 initializer_list :
	         dl={16.0,25.0,36.0,49.0,64.0}; 
  
*/   
#include<iostream>
#include<initializer_list>

double sum(std::initializer_list<double> il);
double average(const std::initializer_list<double> &ril);

int main(int argc,char **argv){
	using std::cout;
	using std::endl;
	
	cout<<"List 1:sum = "<<sum({2,3,4})<<", average= "<<average({2,3,4})<<endl;
	std::initializer_list<double> dl={1.1,2.2,3.3,4.4,5.5};
	cout<<"List 2:sum = "<<sum(dl)<<", average= "<<average(dl)<<endl;
	
	dl={16.0,25.0,36.0,49.0,64.0};
	cout<<"List 3:sum = "<<sum(dl)<<", average= "<<average(dl)<<endl;
	
	return 0;
}
double sum(std::initializer_list<double> il){
	double tot = 0;
	for(auto p = il.begin();p != il.end();++p){
		tot += *p;
	}
	return tot;
	
}

double average(const std::initializer_list<double> &ril){
	double tot = 0;
	int n = ril.size();
	double ave = 0.0;
	if(n > 0){
		for(auto p = ril.begin();p != ril.end();++p){
			tot+=*p;
		}
	    ave = tot / n;
    }
    return ave;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值