//: C06:SpecialList.cpp
// Z knihy "Myslíme v jazyce C++, část 2" od Bruce Eckela a Chucka Allisona.
// (c) 1995-2004 MindView, Inc. Všechna práva vyhrazena.
// Přečtěte si podmínky používání zdrojových kódů umístěné v souboru 
// 'Licence.txt' dodávaném spolu s balíčkem kódu dostupným na www.MindView.net.
// Použití druhé verze algoritmu transform().
#include <algorithm>
#include <ctime>
#include <vector>
#include "Inventory.h"
#include "PrintSequence.h"
using namespace std;

struct ZlevneneZbozi {
  Katalog operator()(const Katalog& kat,
    float sleva) {
    return Katalog(kat.getPolozka(), kat.getMnozstvi(),
      int(kat.getHodnota() * (1 - sleva)));
  }
};

struct GeneratorSlev {
  float operator()() {
    float r = float(rand() % 10);
    return r / 100.0;
  }
};

int main() {
  vector<Katalog> vi;
  srand(time(0));  // generátor náhodných čísel
  generate_n(back_inserter(vi), 15, KatalogGen());
  print(vi.begin(), vi.end(), "vi");
  vector<float> slevy;
  generate_n(back_inserter(slevy), 15, GeneratorSlev());
  print(slevy.begin(), slevy.end(), "Slevy:");
  vector<Katalog> zlevneno;
  transform(vi.begin(),vi.end(), slevy.begin(),
    back_inserter(zlevneno), ZlevneneZbozi());
  print(zlevneno.begin(), zlevneno.end(),"zlevněno");
} ///:~
