Accelerated C++ Exercise 5-6

来源:互联网 发布:佳能mp258清零软件 编辑:程序博客网 时间:2024/06/05 19:00
#include "extract_fails.h"#include "grade.h"using std::list;using std::vector;// version 4: use `list' instead of `vector'   list<Student_info> extract_fails(list<Student_info>& students)   {       list<Student_info> fail;       list<Student_info>::iterator iter = students.begin();          while (iter != students.end()) {           if (fgrade(*iter)) {               fail.push_back(*iter);               iter = students.erase(iter);           } else               ++iter;       }       return fail;   }/*vector<Student_info> extract_fails(vector<Student_info>& students)   {       vector<Student_info> pass, fail;          for (vector<Student_info>::size_type i = 0;            i != students.size(); ++i)           if (fgrade(students[i]))               fail.push_back(students[i]);           else               pass.push_back(students[i]);          students = pass;       return fail;   }  */ vector<Student_info> extract_fails(vector<Student_info>& students)   {       vector<Student_info> pass, fail; #ifdef _MSC_VERstd::vector<Student_info>::size_type i = 0;#elsevector<Student_info>::size_type i = 0;#endif// invariant: elements `[0,' `i)' of `students' represent passing gradeswhile (i != students.size()) {if (fgrade(students[i])) {fail.push_back(students[i]);students.insert(students.begin(), students[i]);++i; } ++i;}    students.resize(students.size() - fail.size());return fail;}
#include <algorithm>   #include <vector >#include <string>   #include <fstream>#include <ctime>   #include "grade.h"   #include "Student_info.h" #include "extract_fails.h"   using std::max;      using std::cin;   using std::cout;   using std::endl;   using std::vector;   using std::string; using std::ofstream;using std::ifstream;using std::sort;      int main()   {   vector<Student_info> vs;   Student_info s;   string::size_type maxlen = 0;ifstream infile;  //infile.open("100.txt"); //Elapsed:6        对比:27infile.open("1000.txt"); //Elapsed:58      对比:1844//infile.open("10000.txt"); //Elapsed:571      对比:没有耐心等下去!!!if(!infile.is_open()){        cout<<"不可以打开文件"<<std::endl;        system("pause");        exit(1);  }  while (read(infile, s)) {   maxlen = max(maxlen, s.name.size());   vs.push_back(s);   }   sort(vs.begin(), vs.end(), compare);  clock_t start=clock();vector<Student_info> fails = extract_fails(vs);   clock_t elapsed=clock()-start;cout<<"   ELAPSED:   "<<elapsed<<endl<<endl;vector<Student_info>::iterator i;   /*for (i = fails.begin(); i != fails.end(); ++i)   cout << i->name << " " << grade(*i) << endl<<endl;   vector<Student_info>::iterator j;   for (j = vs.begin(); j != vs.end(); ++j)   cout << j->name << " " << grade(*j) << endl;   */system("pause");    return 0;   }

这种方法和以前相比效率低很多!!!