Advertisement
Smudla

CPP10

Dec 10th, 2015
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <list>
  4. #include <string>
  5. #include <functional>
  6. #include <random>
  7. #include <algorithm>
  8. #include <time.h>
  9. #include <iterator>
  10.  
  11.  
  12. struct Osoba{
  13.     std::string jmeno;
  14.     std::string prijmeni;
  15.     char pohlavi;
  16.     Osoba() { }
  17.     Osoba(std::string jmeno, std::string prijmeni, char pohlavi) : jmeno(jmeno), prijmeni(prijmeni), pohlavi(pohlavi) { }
  18. };
  19.  
  20. namespace name
  21. {
  22.     std::string jmena[6] = { "Danny", "Jane", "Frederic", "Francis", "Chico", "Rico" };
  23.     std::string Prijmeni[6] = { "Le Fleur", "Stalin", "Uljanov", "Hitler", "Vader", "van Der Darbujan" };
  24. };
  25.  
  26. class generateOsoba {
  27. public:
  28.     char pohlavi;
  29.     generateOsoba(char pohlavi) : pohlavi(pohlavi) { }
  30.     Osoba operator() () {
  31.         int random[2];
  32.         random[0] = rand() % 6;
  33.         random[1] = rand() % 6;
  34.         return Osoba(name::jmena[random[0]], name::Prijmeni[random[1]], pohlavi);
  35.     }
  36. };
  37.  
  38. std::ostream& operator<<(std::ostream& outputStream, const Osoba& osoba) {
  39.     outputStream << osoba.jmeno << " " << osoba.prijmeni << " " << osoba.pohlavi << std::endl;
  40.     return outputStream;
  41. }
  42.  
  43. struct Rodina{
  44. public:
  45.     std::pair<Osoba, Osoba> rodice;
  46.     std::list<Osoba> deti;
  47.     Rodina(const Osoba& otec, const Osoba& matka) {
  48.         rodice.first = otec;
  49.         rodice.second = matka;
  50.         int pocetDeti = rand() % 10 + 1;
  51.         if (pocetDeti >= 5 && pocetDeti <= 8) {
  52.             generateDite();
  53.         }else if(pocetDeti >= 9) {
  54.             generateDite();
  55.             generateDite();
  56.         }
  57.     }  
  58.  
  59.     void generateDite()
  60.     {
  61.         int random[2];
  62.         random[0] = rand() % 6;
  63.         int pohlaviRand = rand() % 2;
  64.         char pohlavi[2] = { 'm', 'z' };
  65.         deti.push_back(Osoba(name::jmena[random[0]], rodice.first.prijmeni, pohlavi[pohlaviRand]));
  66.     };
  67.  
  68.     friend std::ostream& operator<<(std::ostream& os,const Rodina& rodina);
  69. };
  70.  
  71. template <typename Function>
  72. struct ProvedDetem : public std::unary_function <Rodina, void> {
  73.  
  74.     ProvedDetem() { }
  75.     ProvedDetem(Function function) : _function(function) { }
  76.  
  77.     void operator()(Rodina& rodina) {
  78.         for (list<Osoba>::iterator it = rodina.deti.begin(); it != rodina.deti.end(); it++) {
  79.             _function(*it);
  80.         }
  81.     }
  82. private:
  83.     Function _function;
  84. };
  85.  
  86. std::ostream& operator<<(std::ostream& os, const Rodina& rodina){
  87.     os << std::endl << "Rodina: " << std::endl;
  88.     os << "Otec: " << rodina.rodice.first.jmeno << " " << rodina.rodice.first.prijmeni << std::endl;
  89.     os << "Matka: " << rodina.rodice.second.jmeno << " " << rodina.rodice.second.prijmeni << std::endl;
  90.     os << "Deti: " << std::endl;
  91.     for (std::list<Osoba>::const_iterator it = rodina.deti.begin(); it!= rodina.deti.end(); it++)
  92.     {
  93.         os << *(it);
  94.     }
  95.     os << std::endl;
  96.     return os;
  97. }
  98.  
  99. class funktorProPredani{
  100. public:
  101.     funktorProPredani(){};
  102.     funktorProPredani operator()(const std::vector<Rodina>& rodiny, const std::vector<Osoba>& deti){
  103.         //copy_if(rodiny.cbegin(), rodiny.cend(), deti, [](const Rodina& r) {return r.deti)};
  104.     }
  105. };
  106.  
  107. using namespace std;
  108. int main()
  109. {
  110.     srand(time(NULL));
  111.     vector<Osoba> vOsob(10);
  112.     generate(vOsob.begin(), vOsob.begin() + 5, generateOsoba('m'));
  113.     generate(vOsob.begin() + 5, vOsob.end(), generateOsoba('z'));
  114.     cout << "vector osob:" << endl;
  115.     for (vector<Osoba>::const_iterator it = vOsob.cbegin(); it != vOsob.cend(); it++)
  116.     {
  117.         cout << *(it);
  118.     }
  119.     vector<Osoba> muzi, zeny;
  120.     copy_if(vOsob.begin(), vOsob.end(), back_inserter(zeny), [](const Osoba& o) {return o.pohlavi == ('z'); });
  121.     vOsob.erase(std::remove_if(
  122.         vOsob.begin(), vOsob.end(),
  123.         [](const Osoba& o) {
  124.         return o.pohlavi == ('z');
  125.     }), vOsob.end());
  126.     copy_if(vOsob.begin(), vOsob.end(), back_inserter(muzi), [](const Osoba& o) {return o.pohlavi == ('m'); });
  127.     vOsob.erase(std::remove_if(
  128.         vOsob.begin(), vOsob.end(),
  129.         [](const Osoba& o) {
  130.         return o.pohlavi == ('m');
  131.     }), vOsob.end());
  132.     cout << "\nMuzi: \n" << endl;
  133.     for (vector<Osoba>::const_iterator it = muzi.cbegin(); it != muzi.cend(); it++)
  134.     {
  135.         cout << *(it);
  136.     }
  137.     cout << "\nZeny:\n" << endl;
  138.     for (vector<Osoba>::const_iterator it = zeny.cbegin(); it != zeny.cend(); it++)
  139.     {
  140.         cout << *(it);
  141.     }
  142.     cout << "\nvector osob:" << endl;
  143.     for (vector<Osoba>::const_iterator it = vOsob.cbegin(); it != vOsob.cend(); it++)
  144.     {
  145.         cout << *(it);
  146.     }
  147.  
  148.    
  149.     vector<Rodina> rodiny;
  150.     transform(muzi.cbegin(), muzi.cend(), zeny.cbegin(), back_inserter(rodiny), [](const Osoba& o1, const Osoba& o2) {return Rodina(o1, o2); });
  151.     cout << "\nvector rodin:" << endl;
  152.     for (vector<Rodina>::const_iterator it = rodiny.cbegin(); it != rodiny.cend(); it++)
  153.     {
  154.         cout << *(it);
  155.     }
  156.  
  157.     rodiny.erase(std::remove_if(
  158.         rodiny.begin(), rodiny.end(),
  159.         [](const Rodina& r) {
  160.         return r.deti.empty();
  161.     }), rodiny.end());
  162.  
  163.     cout << "\nvector rodin po smazani bezdetnych:" << endl;
  164.     for (vector<Rodina>::const_iterator it = rodiny.cbegin(); it != rodiny.cend(); it++)
  165.     {
  166.         cout << *(it);
  167.     }
  168.     vector<Osoba> deti;
  169.  
  170.     system("pause");
  171.     return 0;
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement