home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / Ebooks / Thinking in C++ V2 / C21 / SpecialList.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-25  |  1.1 KB  |  44 lines

  1. //: C21:SpecialList.cpp
  2. // From Thinking in C++, 2nd Edition
  3. // Available at http://www.BruceEckel.com
  4. // (c) Bruce Eckel 1999
  5. // Copyright notice in Copyright.txt
  6. // Using the second version of transform()
  7. #include "Inventory.h"
  8. #include "PrintSequence.h"
  9. #include <vector>
  10. #include <algorithm>
  11. #include <cstdlib>
  12. #include <ctime>
  13. using namespace std;
  14.  
  15. struct Discounter {
  16.   Inventory operator()(const Inventory& inv,
  17.     float discount) {
  18.     return Inventory(inv.getItem(), 
  19.       inv.getQuantity(), 
  20.       inv.getValue() * (1 - discount));
  21.   }
  22. };
  23.  
  24. struct DiscGen {
  25.   DiscGen() { srand(time(0)); }
  26.   float operator()() {
  27.     float r = float(rand() % 10);
  28.     return r / 100.0;
  29.   }
  30. };
  31.  
  32. int main() {
  33.   vector<Inventory> vi;
  34.   generate_n(back_inserter(vi), 15, InvenGen());
  35.   print(vi, "vi");
  36.   vector<float> disc;
  37.   generate_n(back_inserter(disc), 15, DiscGen());
  38.   print(disc, "Discounts:");
  39.   vector<Inventory> discounted;
  40.   transform(vi.begin(),vi.end(), disc.begin(), 
  41.     back_inserter(discounted), Discounter());
  42.   print(discounted, "discounted");
  43. } ///:~
  44.