Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <list>
- #include <string>
- #include <functional>
- #include <random>
- #include <algorithm>
- #include <time.h>
- #include <iterator>
- struct Osoba{
- std::string jmeno;
- std::string prijmeni;
- char pohlavi;
- Osoba() { }
- Osoba(std::string jmeno, std::string prijmeni, char pohlavi) : jmeno(jmeno), prijmeni(prijmeni), pohlavi(pohlavi) { }
- };
- namespace name
- {
- std::string jmena[6] = { "Danny", "Jane", "Frederic", "Francis", "Chico", "Rico" };
- std::string Prijmeni[6] = { "Le Fleur", "Stalin", "Uljanov", "Hitler", "Vader", "van Der Darbujan" };
- };
- class generateOsoba {
- public:
- char pohlavi;
- generateOsoba(char pohlavi) : pohlavi(pohlavi) { }
- Osoba operator() () {
- int random[2];
- random[0] = rand() % 6;
- random[1] = rand() % 6;
- return Osoba(name::jmena[random[0]], name::Prijmeni[random[1]], pohlavi);
- }
- };
- std::ostream& operator<<(std::ostream& outputStream, const Osoba& osoba) {
- outputStream << osoba.jmeno << " " << osoba.prijmeni << " " << osoba.pohlavi << std::endl;
- return outputStream;
- }
- struct Rodina{
- public:
- std::pair<Osoba, Osoba> rodice;
- std::list<Osoba> deti;
- Rodina(const Osoba& otec, const Osoba& matka) {
- rodice.first = otec;
- rodice.second = matka;
- int pocetDeti = rand() % 10 + 1;
- if (pocetDeti >= 5 && pocetDeti <= 8) {
- generateDite();
- }else if(pocetDeti >= 9) {
- generateDite();
- generateDite();
- }
- }
- void generateDite()
- {
- int random[2];
- random[0] = rand() % 6;
- int pohlaviRand = rand() % 2;
- char pohlavi[2] = { 'm', 'z' };
- deti.push_back(Osoba(name::jmena[random[0]], rodice.first.prijmeni, pohlavi[pohlaviRand]));
- };
- friend std::ostream& operator<<(std::ostream& os,const Rodina& rodina);
- };
- template <typename Function>
- struct ProvedDetem : public std::unary_function <Rodina, void> {
- ProvedDetem() { }
- ProvedDetem(Function function) : _function(function) { }
- void operator()(Rodina& rodina) {
- for (list<Osoba>::iterator it = rodina.deti.begin(); it != rodina.deti.end(); it++) {
- _function(*it);
- }
- }
- private:
- Function _function;
- };
- std::ostream& operator<<(std::ostream& os, const Rodina& rodina){
- os << std::endl << "Rodina: " << std::endl;
- os << "Otec: " << rodina.rodice.first.jmeno << " " << rodina.rodice.first.prijmeni << std::endl;
- os << "Matka: " << rodina.rodice.second.jmeno << " " << rodina.rodice.second.prijmeni << std::endl;
- os << "Deti: " << std::endl;
- for (std::list<Osoba>::const_iterator it = rodina.deti.begin(); it!= rodina.deti.end(); it++)
- {
- os << *(it);
- }
- os << std::endl;
- return os;
- }
- class funktorProPredani{
- public:
- funktorProPredani(){};
- funktorProPredani operator()(const std::vector<Rodina>& rodiny, const std::vector<Osoba>& deti){
- //copy_if(rodiny.cbegin(), rodiny.cend(), deti, [](const Rodina& r) {return r.deti)};
- }
- };
- using namespace std;
- int main()
- {
- srand(time(NULL));
- vector<Osoba> vOsob(10);
- generate(vOsob.begin(), vOsob.begin() + 5, generateOsoba('m'));
- generate(vOsob.begin() + 5, vOsob.end(), generateOsoba('z'));
- cout << "vector osob:" << endl;
- for (vector<Osoba>::const_iterator it = vOsob.cbegin(); it != vOsob.cend(); it++)
- {
- cout << *(it);
- }
- vector<Osoba> muzi, zeny;
- copy_if(vOsob.begin(), vOsob.end(), back_inserter(zeny), [](const Osoba& o) {return o.pohlavi == ('z'); });
- vOsob.erase(std::remove_if(
- vOsob.begin(), vOsob.end(),
- [](const Osoba& o) {
- return o.pohlavi == ('z');
- }), vOsob.end());
- copy_if(vOsob.begin(), vOsob.end(), back_inserter(muzi), [](const Osoba& o) {return o.pohlavi == ('m'); });
- vOsob.erase(std::remove_if(
- vOsob.begin(), vOsob.end(),
- [](const Osoba& o) {
- return o.pohlavi == ('m');
- }), vOsob.end());
- cout << "\nMuzi: \n" << endl;
- for (vector<Osoba>::const_iterator it = muzi.cbegin(); it != muzi.cend(); it++)
- {
- cout << *(it);
- }
- cout << "\nZeny:\n" << endl;
- for (vector<Osoba>::const_iterator it = zeny.cbegin(); it != zeny.cend(); it++)
- {
- cout << *(it);
- }
- cout << "\nvector osob:" << endl;
- for (vector<Osoba>::const_iterator it = vOsob.cbegin(); it != vOsob.cend(); it++)
- {
- cout << *(it);
- }
- vector<Rodina> rodiny;
- transform(muzi.cbegin(), muzi.cend(), zeny.cbegin(), back_inserter(rodiny), [](const Osoba& o1, const Osoba& o2) {return Rodina(o1, o2); });
- cout << "\nvector rodin:" << endl;
- for (vector<Rodina>::const_iterator it = rodiny.cbegin(); it != rodiny.cend(); it++)
- {
- cout << *(it);
- }
- rodiny.erase(std::remove_if(
- rodiny.begin(), rodiny.end(),
- [](const Rodina& r) {
- return r.deti.empty();
- }), rodiny.end());
- cout << "\nvector rodin po smazani bezdetnych:" << endl;
- for (vector<Rodina>::const_iterator it = rodiny.cbegin(); it != rodiny.cend(); it++)
- {
- cout << *(it);
- }
- vector<Osoba> deti;
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement