#include <iostream>
#include <string>
#include <sstream>
#include <ostream>
class Kot {
private:
std::string gatunek;
int wielkosc;
public:
Kot(std::string gatunek,int wielkosc) :
gatunek(gatunek), wielkosc(wielkosc) {}
Kot() : gatunek(""), wielkosc(0) {}
Kot& operator+=(const Kot& k) {
wielkosc += k.wielkosc;
gatunek += (gatunek.empty() ? k.gatunek : " "+k.gatunek);
return *this;
}
friend std::ostream& operator<<(std::ostream& out,Kot &k) {
std::stringstream w;
w << k.wielkosc;
out << k.gatunek+" "+w.str();
return out;
}
};
class ListaKotow {
private:
typedef struct Element {
Element *nastepny;
Kot kot;
} Element;
Element *pierwszy;
Element *ostatni;
public:
ListaKotow() : pierwszy(NULL), ostatni(NULL) {}
void push_back(Kot k) {
Element *e = new Element;
e->kot = k;
e->nastepny = NULL;
if(!pierwszy && !ostatni)
pierwszy = e;
else
ostatni->nastepny = e;
ostatni = e;
}
~ListaKotow() {
Element *ns, *s = pierwszy;
while(s) {
ns = s->nastepny;
delete s;
s = ns;
}
}
Kot dajSuperKotaMieszanca() {
Kot superKotMieszaniec;
Element *e;
for(e = pierwszy; e; e=e->nastepny)
superKotMieszaniec += e->kot;
return superKotMieszaniec;
}
};
int main(void) {
ListaKotow koty;
koty.push_back(Kot("Perski",12));
koty.push_back(Kot("Brytyjski",10));
koty.push_back(Kot("Egzotyczny",8));
koty.push_back(Kot("Ragdoll",10));
koty.push_back(Kot("Norweski",22));
Kot mieszaniec = koty.dajSuperKotaMieszanca();
std::cout << mieszaniec << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPG9zdHJlYW0+CgpjbGFzcyBLb3Qgewpwcml2YXRlOgoJc3RkOjpzdHJpbmcgZ2F0dW5lazsKCWludCB3aWVsa29zYzsKcHVibGljOgoJS290KHN0ZDo6c3RyaW5nIGdhdHVuZWssaW50IHdpZWxrb3NjKSA6CgkJZ2F0dW5layhnYXR1bmVrKSwgd2llbGtvc2Mod2llbGtvc2MpIHt9CglLb3QoKSA6IGdhdHVuZWsoIiIpLCB3aWVsa29zYygwKSB7fQoJS290JiBvcGVyYXRvcis9KGNvbnN0IEtvdCYgaykgewoJCXdpZWxrb3NjICs9IGsud2llbGtvc2M7CgkJZ2F0dW5layArPSAoZ2F0dW5lay5lbXB0eSgpID8gay5nYXR1bmVrIDogIiAiK2suZ2F0dW5layk7CgkJcmV0dXJuICp0aGlzOwoJfQoJZnJpZW5kIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCxLb3QgJmspIHsKCQlzdGQ6OnN0cmluZ3N0cmVhbSB3OwoJCXcgPDwgay53aWVsa29zYzsKCQlvdXQgPDwgay5nYXR1bmVrKyIgIit3LnN0cigpOwoJCXJldHVybiBvdXQ7Cgl9Cn07CgpjbGFzcyBMaXN0YUtvdG93IHsKcHJpdmF0ZToKCXR5cGVkZWYgc3RydWN0IEVsZW1lbnQgewoJCUVsZW1lbnQgKm5hc3RlcG55OwoJCUtvdCBrb3Q7Cgl9IEVsZW1lbnQ7CglFbGVtZW50ICpwaWVyd3N6eTsKCUVsZW1lbnQgKm9zdGF0bmk7CnB1YmxpYzoKCUxpc3RhS290b3coKSA6IHBpZXJ3c3p5KE5VTEwpLCBvc3RhdG5pKE5VTEwpIHt9Cgl2b2lkIHB1c2hfYmFjayhLb3QgaykgewoJCUVsZW1lbnQgKmUgPSBuZXcgRWxlbWVudDsKCQllLT5rb3QgPSBrOwoJCWUtPm5hc3RlcG55ID0gTlVMTDsKCQlpZighcGllcndzenkgJiYgIW9zdGF0bmkpCgkJCXBpZXJ3c3p5ID0gZTsKCQllbHNlCgkJCW9zdGF0bmktPm5hc3RlcG55ID0gZTsKCQlvc3RhdG5pID0gZTsKCX0KCX5MaXN0YUtvdG93KCkgewoJCUVsZW1lbnQgKm5zLCAqcyA9IHBpZXJ3c3p5OwoJCXdoaWxlKHMpIHsKCQkJbnMgPSBzLT5uYXN0ZXBueTsKCQkJZGVsZXRlIHM7CgkJCXMgPSBuczsKCQl9Cgl9CglLb3QgZGFqU3VwZXJLb3RhTWllc3phbmNhKCkgewoJCUtvdCBzdXBlcktvdE1pZXN6YW5pZWM7CgkJRWxlbWVudCAqZTsKCQlmb3IoZSA9IHBpZXJ3c3p5OyBlOyBlPWUtPm5hc3RlcG55KQoJCQlzdXBlcktvdE1pZXN6YW5pZWMgKz0gZS0+a290OwoJCXJldHVybiBzdXBlcktvdE1pZXN6YW5pZWM7Cgl9Cn07CgppbnQgbWFpbih2b2lkKSB7CglMaXN0YUtvdG93IGtvdHk7Cglrb3R5LnB1c2hfYmFjayhLb3QoIlBlcnNraSIsMTIpKTsKCWtvdHkucHVzaF9iYWNrKEtvdCgiQnJ5dHlqc2tpIiwxMCkpOwoJa290eS5wdXNoX2JhY2soS290KCJFZ3pvdHljem55Iiw4KSk7Cglrb3R5LnB1c2hfYmFjayhLb3QoIlJhZ2RvbGwiLDEwKSk7Cglrb3R5LnB1c2hfYmFjayhLb3QoIk5vcndlc2tpIiwyMikpOwoJS290IG1pZXN6YW5pZWMgPSBrb3R5LmRhalN1cGVyS290YU1pZXN6YW5jYSgpOwoJc3RkOjpjb3V0IDw8IG1pZXN6YW5pZWMgPDwgc3RkOjplbmRsOwoJcmV0dXJuIDA7Cn0=