部分习题参考了网上已有的解答
Ex.4-0
median.h
#ifndef GUARD_median_h
#define GUARD_median_h
#include<vector>
double median(std::vector<double>);
#endif
median.cpp
#include<algorithm>
#include<stdexcept>
#include<vector>
using std::domain_error;
using std::sort;
using std::vector;
double median (vector<double>vec)
{
typedef vector<double>::size_typevec_sz;
vec_sz size =vec.size();
if (size == 0)
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]) :vec[mid];
}
Student_info.h
#ifndef GUARD_Student_info
#define GUARD_Student_info
#include<iostream>
#include<string>
#include<vector>
struct Student_info {
std::string name;
double midterm, final;
std::vector<double> homework;
};
bool compare(constStudent_info&,const Student_info&);
std::istream& read(std::istream&, Student_info&);
std::istream& read_hw(std::istream&, std::vector<double>&);
#endif
Student_info.cpp
#include"Student_info.h"
using std::istream;
using std::vector;
bool compare (constStudent_info& x,const Student_info& y){
return x.name < y.name;
}
istream& read (istream& is, Student_info& s) {
is >> s.name>> s.midterm >> s.final;
read_hw (is,s.homework);
return is;
}
istream& read_hw (istream& in, vector<double>& hw) {
if (in) {
hw.clear();
double x;
while (in >> x)
hw.push_back