三种函数参数

三种函数参数
/**
 * Accelerated C++ 笔记
**/
// 计算一个vector<double>类型的变量的中值
// 值得注意的是,掉哟跟函数时整个vector参数都会被复制
double  median(vector < double >  vec)  // 不改变向量本身
{
    typedef vector
< double > ::size_type vec_sz;

    vec_sz size 
=  vec.size();
    
if (size  ==   0 )
        
throw  domain_error( " median of an empty vector " );
    sort(vec.begin(), vec.end());
    
    vec_sz mid 
=  size / 2 ;
    
return  size  %   2   ==   0   ?  (vec[mid] + vec[mid - 1 ])  /   2  : vec[mid];
}

// 根据期中,期末考试成绩和保存家庭作业的向量来计算学生的总成绩
// 真个函数不用复制它的参数,因为median已经为我们完成了这个工作
double  grade( double  midterm,  double  final,  const  vector < double >&  hw)
{
    
if (hw.size()  ==   0 )
        
throw  domain_error( " student has done no homework " );
    
return  grade(midterm, final, median(hw));
}
// 函数重载
double  grade( double  midterm,  double  final,  double  homework)
{
    
return   0.2   *  midterm  +   0.4   *  final  +   0.4   *  homework;
}

/* *
    const vector<double>&这种类型被成为"对参数类型为double的向量常量的引用"
    vector<double> homework;
    vector<double>& hw = homework; //hw是homework的一个替代名,
    //对hw的任何操作都等价于对homework的操作

    const vector<double>& chw = homework; //chw是homework的一个替代名,
    //const确保了我们将不会对chw的任何可能改变它的值的操作

    vector<double>& hw1 = hw; //同hw等价,是homework的一个替代名
    const vector<double>& chw1 = chw; //同chw等价,不允许写访问homework的一个替代名
*
*/


// 从输入流中将家庭作业的成绩读入到一个vector<double>中
istream read_hw(istream &   in , vector < double >&  hw)
{
    
if ( in ){
        hw.clear(); 
// 清除原先内容
         double  x;
        
while ( in   >>  x)
            hw.push_back(x);
        
// 清除流以使输入动作对于下一个学生有效
         in .clear();
    }
    
return   in ;
}


你可能感兴趣的:(三种函数参数)