valarray valarray类是由头文件valarray支持的。顾名思义,这个类用于处理数值,它支持诸如将数组中所有元素的值向家已经在数组中找出最值等操作。
#include <iostream> #include <string> #include <valarray> using namespace std;
class Student { typedef valarray<double > ArrayDb; string name; ArrayDb scores; ostream& arr_out (std::ostream& os) const ; public : Student ():name ("Null Student" ),scores (){ } explicit Student (const string &s) :name(s),scores(){ } explicit Student (int n) :name("Nully" ),scores(n){ } Student (const string&s,int n):name (s),scores (n){ } Student (const string&s,const ArrayDb&a):name (s),scores (a){ } Student (const char *str,const double *pd,int n):name (str),scores (pd,n){} ~Student (){ } double Average () const ; const string& Name () const ; double & operator [](int i); double operator [](int i)const ; friend istream& operator >>(istream& is, Student& stu); friend istream& getline (istream& is, Student& stu) ; friend ostream& operator <<(ostream& os, Student& stu); };
ostream& Student::arr_out (std::ostream& os) const { int i; int lim = scores.size (); if (lim > 0 ) { for (i = 0 ;i < lim;i++) { os << scores[i] << " " ; if (i % 5 == 4 ) cout << endl; } if (i % 5 != 0 ) os << endl; } else os << "empty array" ; return os; } double Student::Average () const { if (scores.size () > 0 ) return scores.sum () / scores.size (); else return 0 ; } const string& Student::Name () const { return name; } double & Student::operator [](int i){ return scores[i]; } double Student::operator [](int i) const { return scores[i]; } istream& operator >>(istream& is, Student& stu) { is >> stu.name; return is; } istream& getline (istream& is, Student& stu) { getline (is, stu.name); return is; } ostream& operator <<(ostream& os, Student& stu) { os << "Scores for" << stu.name << ":\n" ; stu.arr_out (os); return os; }
void set (Student& sa, int n) { cout << "Please enter the student's name:" ; getline (cin, sa); cout << "Please enter " << n << " quze scores:\n" ; for (int i = 0 ;i < n;i++) { cin >> sa[i]; } while (cin.get () != '\n' ) continue ; } const int pupils = 3 ;const int quzzes = 5 ;void set (Student& sa, int n) ;int main () { Student ada[pupils] = { Student (quzzes),Student (quzzes),Student (quzzes) }; int i; for (i = 0 ;i < pupils;++i) set (ada[i], quzzes); cout << "\nStudent List:\n" ; for (i = 0 ;i < pupils;++i) cout << "\nResults:" ; for (i = 0 ;i < pupils;++i) { cout << endl << ada[i]; cout << "average:" << ada[i].Average () << endl; } cout << "Done" << endl; return 0 ; }
Please enter the student's name:Gil Bayts Please enter 5 quze scores: 92 94 96 93 95 Please enter the student's name:Pat Roone Please enter 5 quze scores: 83 89 72 78 95 Please enter the student's name:Fleur O'Day Please enter 5 quze scores: 92 89 96 74 64 Student List: Results: Results: Results: Scores forGil Bayts: 92 94 96 93 95 average:94 Scores forPat Roone: 83 89 72 78 95 average:83.4 Scores forFleur O'Day: 92 89 96 74 64 average:83 Done