#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #include <vector> #include <time.h> //: Poly.cpp #include <iostream> #include <initializer_list> using namespace std; /* 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<<,,})<<,,})<<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; ; } double sum(std::initializer_list<double> il){ ; for(auto p = il.begin();p != il.end();++p){ tot += *p; } return tot; } double average(const std::initializer_list<double> &ril){ ; int n = ril.size(); double ave = 0.0; ){ for(auto p = ril.begin();p != ril.end();++p){ tot+=*p; } ave = tot / n; } return ave; }