home *** CD-ROM | disk | FTP | other *** search
- //: C21:SpecialList.cpp
- // From Thinking in C++, 2nd Edition
- // Available at http://www.BruceEckel.com
- // (c) Bruce Eckel 1999
- // Copyright notice in Copyright.txt
- // Using the second version of transform()
- #include "Inventory.h"
- #include "PrintSequence.h"
- #include <vector>
- #include <algorithm>
- #include <cstdlib>
- #include <ctime>
- using namespace std;
-
- struct Discounter {
- Inventory operator()(const Inventory& inv,
- float discount) {
- return Inventory(inv.getItem(),
- inv.getQuantity(),
- inv.getValue() * (1 - discount));
- }
- };
-
- struct DiscGen {
- DiscGen() { srand(time(0)); }
- float operator()() {
- float r = float(rand() % 10);
- return r / 100.0;
- }
- };
-
- int main() {
- vector<Inventory> vi;
- generate_n(back_inserter(vi), 15, InvenGen());
- print(vi, "vi");
- vector<float> disc;
- generate_n(back_inserter(disc), 15, DiscGen());
- print(disc, "Discounts:");
- vector<Inventory> discounted;
- transform(vi.begin(),vi.end(), disc.begin(),
- back_inserter(discounted), Discounter());
- print(discounted, "discounted");
- } ///:~
-