//: C05:SpecialList.cpp // From Thinking in C++, 2nd Edition // Available at http://www.BruceEckel.com // (c) Bruce Eckel 2000 // Copyright notice in Copyright.txt // Using the second version of transform() #include "Inventory.h" #include "PrintSequence.h" #include #include #include #include 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 vi; generate_n(back_inserter(vi), 15, InvenGen()); print(vi, "vi"); vector disc; generate_n(back_inserter(disc), 15, DiscGen()); print(disc, "Discounts:"); vector discounted; transform(vi.begin(),vi.end(), disc.begin(), back_inserter(discounted), Discounter()); print(discounted, "discounted"); } ///:~