/**
* 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;
}
posted on 2008-10-04 15:07
xuejzt 阅读(415)
评论(0) 编辑 收藏 引用 所属分类:
C++