valarray类


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

Author: T1g3r
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source T1g3r !
评论
  TOC