首页 > 代码库 > C++程序设计原理与实践 第二十一章部分答案

C++程序设计原理与实践 第二十一章部分答案

  1 #include <iostream>  2 #include <vector>  3 #include <string>  4 #include <list>  5 #include<fstream>  6 #include<algorithm>  7 #include<stdexcept>  8 using namespace std;  9  10 struct  Item 11 { 12     string name; 13     int iid; 14     double value; 15     Item(string s,int i,double d):name(s),iid(i),value(d){} 16     Item(){} 17     Item(string s):name(s){} 18 }; 19  20 ostream& operator<<(ostream&os,Item&i) 21 { 22     os<<i.name<<\t<<\t<<i.iid<<\t<<i.value; 23     return os; 24 } 25  26 istream& operator>>(istream&is,Item&i) 27 { 28     is>>i.name>>i.iid>>i.value; 29     return is; 30 } 31  32 struct sort_name 33 { 34     bool operator()(const Item&i1,const Item&i2) const 35     { 36         if(i1.name<=i2.name) 37             return true; 38         else 39         { 40             return false; 41         } 42     } 43 }; 44  45 struct find_name 46 { 47     string s2; 48     find_name(string s1):s2(s1){} 49     bool operator()(const Item&i) const 50     { 51         if(i.name==s2) 52             return true; 53         else 54         { 55             return false; 56         } 57     } 58 }; 59  60 void find_earse(vector<Item>&vi,const string &n) 61 { 62     vector<Item>::iterator p=vi.begin(); 63     while(p!=vi.end()) 64     { 65         if(p->name==n) 66             break; 67         p++; 68     } 69     vi.erase(p); 70 } 71  72 int main() 73 { 74     vector<Item> vi; 75     Item item; 76     int i; 77     string a; 78     cin>>a; 79      80     ifstream ifs(a.c_str()); 81     if(!ifs) 82         cerr<<"can not open input file1"; 83     for(i=0;i<10;i++) 84     { 85         ifs>>item; 86         vi.push_back(item); 87     } 88  89     sort(vi.begin(),vi.end(),sort_name()); 90  91     item=Item("hourse shoe",99,12.34); 92     vi.insert(vi.begin(),item); 93     item=Item("Canon s400",9899,499.14); 94     vi.insert(vi.begin(),item); 95  96     find_earse(vi,"kj"); 97     find_earse(vi,"oj"); 98  99     for(i=0;i<10;i++)100     {101         cout<<vi[i]<<endl;102     }103 104     vector<Item>::iterator p=find_if(vi.begin(),vi.end(),find_name("dio"));105     cout<<*p<<endl;106     while(1);107     return 0;108 109 }
简单练习
 1 int count1(In first,In last,const T&val) 2 { 3     int i=0; 4     while(first!=last){ 5         if(*first==val) 6             i++; 7         first++; 8     } 9     return i;10 }11 12 template<class In,class Pred>13 int count_if1(In first,In last,Pred pred)14 {15     int i=0;16     while(first!=last){17         if(pred(*first))18             i++;19         first++;20     }21     return i;22 }
习题3 4
 1 #include <iostream> 2 #include <vector> 3 #include <string> 4 #include <list> 5 #include<fstream> 6 #include <set> 7 //#include<algorithm> 8 #include<stdexcept> 9 #include <map>10 using namespace std;11 12 struct Fruit13 {14     string name;15     int count;16     Fruit(string s,int i):name(s),count(i){}17 };18 19 struct Fruit_order20 {21     bool operator()(const Fruit*a,const Fruit*b)const22     {23         return a->name<b->name;24     }25 };26 27 ostream& operator<<(ostream&os,const Fruit* f)28 {29     os<<f->name<<"  "<<f->count;30     return os;31 }32 33 int main()34 {35     36     set<Fruit*,Fruit_order> in;37     in.insert(new Fruit("fa",33));38     in.insert(new Fruit("as",83));39     typedef set<Fruit*>::iterator s1;40     for(s1 p=in.begin();p!=in.end();p++)41         cout<<*p<<endl;42     while(1);43     return 0;44 45 }
习题6
  1 #include <iostream>  2 #include <vector>  3 #include <string>  4 #include <list>  5 #include<fstream>  6 #include <set>  7 #include<algorithm>  8 #include<stdexcept>  9 #include <map> 10 using namespace std; 11  12 struct Purchase 13 { 14     string name; 15     double unit_price; 16     int count; 17  18 }; 19  20 struct Order{ 21     string name; 22     string add; 23     double data; 24     vector<Purchase> vp; 25     bool operator < (const Order&o) const   26     {   27     //return cig_quantity>b1.cig_quantity;   28     //按照名字的大小顺序进行排序   29      return name>o.name; 30     } 31 }; 32  33 istream& operator>>(istream&is,Purchase&p) 34 { 35     is>>p.name>>p.unit_price>>p.count; 36     return is; 37 } 38  39 istream& operator>>(istream&is,Order&o) 40 { 41     is>>o.name>>o.add>>o.data; 42     char c; 43     is>>c; 44     Purchase p; 45     while(c==() 46     { 47         is>>p; 48         o.vp.push_back(p); 49         is>>c; 50         is>>c; 51     } 52     if(c!=() 53         is.putback(c); 54     return is; 55  56 } 57  58 ostream& operator<<(ostream&os,Purchase&p) 59 { 60     os<<p.name<< <<p.unit_price<< <<p.count; 61     return os; 62 } 63  64 ostream& operator<<(ostream&os,Order&o) 65 { 66     os<<o.name<< <<o.add<< <<o.data<< ; 67     for(int i=0;i<o.vp.size();i++) 68         os<<(<<o.vp[i].name<< <<o.vp[i].unit_price<< <<o.vp[i].count<<); 69     return os; 70  71 } 72  73 struct sort_name 74 { 75     bool operator()(const Order&o1,const Order&o2) const 76     { 77         if(o1.name<=o2.name) 78             return true; 79         else 80         { 81             return false; 82         } 83     } 84 }; 85  86 int main() 87 { 88     vector<Order> vo; 89     list<Order>lo; 90     string a; 91     int i=0; 92     //Order o;   //注意不要放在这里 93  94     cin>>a; 95     ifstream ifs(a.c_str()); 96     if(!ifs) 97         cerr<<"can not open input file1"; 98     for(i=0;i<10;i++) 99     {100         Order o;     //应该放在这101         ifs>>o;102         vo.push_back(o);103     }104     ifs.close();105     sort(vo.begin(),vo.end(),sort_name());106 107     cin>>a;108     fstream ofs(a.c_str());109     if(!ofs)110         cerr<<"can not open input file1";111     for(i=0;i<vo.size();i++)112         ofs<<vo[i]<<endl;113 114 115     cin>>a;116     ifstream ifs1(a.c_str());117     if(!ifs1)118         cerr<<"can not open input file1";119     for(i=0;i<10;i++)120     {121         Order o;     //应该放在这122         ifs1>>o;123         lo.push_back(o);124     }125     ifs1.close();126     lo.sort();127 128 129     cin>>a;130     fstream ofs1(a.c_str());131     if(!ofs1)132         cerr<<"can not open input file1";133     for(list<Order>::iterator p=lo.begin();p!=lo.end();p++)134         ofs1<<*p<<endl;135     136 137     vector<Order> vo1(vo.size()+lo.size());138     merge(vo.begin(),vo.end(),lo.begin(),lo.end(),vo1.begin());139     cin>>a;140     fstream f(a.c_str());141     if(!f)142         cerr<<"can not open input file1";143 144     while(1);145     return 0;146 147 }
习题9

习题8   先找出最大频率   然后再遍历输出

 

习题10  accumulate()

 

习题14  map储存  s[][0]==‘s‘   size()

 

C++程序设计原理与实践 第二十一章部分答案