= CPPStudy_2005_1/STL성적처리 = * 01 남상협 * 좀 허접하지만.. = InputText = {{{~cpp 이름 국 영 수 과 김철수 59 98 75 91 마동탁 66 78 77 84 박민철 52 50 63 72 신순이 97 55 52 97 송영이 78 82 63 73 양민수 72 66 73 52 장준구 95 62 94 53 최호민 78 53 74 75 태석호 66 82 82 94 }}} = code = {{{~cpp #include #include #include #include #include #include using namespace std; #define SUBJECT_SIZE 4 struct Student_info { string name; vector subjects; int total; double average; }; double Sum(Student_info &s); void totalSum(vector &students); double average(Student_info &s); void totalAverage(vector &students); bool totalCompare(const Student_info &s1, const Student_info &s2); void sortBySum(vector &students); ostream& displayScores(ostream &out, const vector &students); istream& readScores(istream &in, ifstream &fin, vector &students); int main() { ifstream fin("score.txt"); vector students; readScores(cin,fin,students); totalSum(students); totalAverage(students); sortBySum(students); displayScores(cout,students); return 0; } double Sum(Student_info &s) { s.total=accumulate(s.subjects.begin()+(s.subjects.size()-4),s.subjects.end(),0); return s.total; } void totalSum(vector &students) { vector sum; transform(students.begin(),students.end(),back_inserter(sum),Sum); } double average(Student_info &s) { return s.average=Sum(s)/SUBJECT_SIZE; } void totalAverage(vector &students) { vector averageScore; transform(students.begin(),students.end(),back_inserter(averageScore),average); } void sortBySum(vector &students) { sort(students.begin(),students.end(),totalCompare); } bool totalCompare(const Student_info &s1, const Student_info &s2) { return s1.total > s2.total; } ostream& displayScores(ostream &out, const vector &students) { for(vector::const_iterator it = students.begin() ; it!=students.end();++it) out<name<<" - totalSum : "<total<<" average : "<average<<"\n"; return out; } istream& readScores(istream &in, ifstream &fin, vector &students) { string name, temp; int scoreTemp; Student_info student; vector subject; fin>> name; while(fin>>temp && subject.size()!=SUBJECT_SIZE) subject.push_back(temp); do { student.name = temp; for(vector::const_iterator it = subject.begin() ; it!=subject.end() && fin>>scoreTemp;++it) student.subjects.push_back(scoreTemp); students.push_back(student); }while(fin>>temp); return in; } }}} = result = http://zeropage.org/~namsangboy/score.GIF = thread = {{{~cpp s.total=accumulate(s.subjects.begin()+(s.subjects.size()-4),s.subjects.end(),0); }}} * 이 부분에서 살짝 삽질을 했다. 처음에 s.begin() 부터 s.end() 범위로 하니깐 누적되어서 더해져서 삽질하다가 다른 방도를 찾아서 저렇게 했다.