/**
* 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 閱讀(418)
評論(0) 編輯 收藏 引用 所屬分類:
C++