也是只有main函数修改,其余不动。
//main.cpp
#include <iostream>
#include <cstdlib>
#include <fstream>
#include "ArrayCollection.h"
#include "LinkedListIterator.h"
#include "LinkedListCollection.h"
#include "Score.h"
using namespace std;
template <class _Iterator>
bool isPass(const _Iterator& p){
float pass1, pass2, pass3;
ifstream is("passScore.txt");
is >> pass1 >> pass2 >> pass3;
return (p->value[0] >= pass1 &&
p->value[1] >= pass2 &&
p->value[2] >= pass3);
}//注意:这个isPass的实现是有缺陷的,只适合于Score类型
template <class _iterator>
void analyze(_iterator begin, _iterator end, bool (*isPass)(const _iterator&)){
int passed = 0, count = 0;
for(_iterator p = begin; p != end; p++){
if(isPass(p))
passed++;
count++;
}
cout << "passing rate = " << (float)passed / count << endl;
}
int main(int argc, char** argv) {
Score sarray[3];
sarray[0] = Score(60, 60, 60);
sarray[1] = Score(70, 70, 70);
sarray[2] = Score(50, 80, 80);
ArrayCollection<Score> collection3(3, sarray);
LinkedListCollection<Score> collection4;
for(int i = 0; i < 3; i++)
collection4.addFirst(sarray[i]);
analyze(sarray, sarray + 3, isPass<Score*>);
analyze(collection3.begin(), collection3.end(), isPass<Score*>);
analyze(collection4.begin(), collection4.end(), isPass<LinkedListIterator<Score>>);
system("PAUSE");
return EXIT_SUCCESS;
}
passScore.txt文件的内容:
70 60 60