#include <cstdio>
#include <iostream>
#include <string>
#include <stdexcept>
#include <sstream>
template<typename Tval_type>
class List {
private:
typedef struct el {
struct el *next;
struct el *prev;
Tval_type val;
} el;
el *first;
el *last;
public:
List() : first(NULL), last(NULL) {}
void push_back(Tval_type val) {
el* n = new el;
n->next = NULL;
n->prev = last;
n->val = val;
if(!first && !last)
first = n;
else
last->next = n;
last = n;
}
Tval_type& get(size_t index) {
el *e = first;
while(index && e) {
--index;
e = e->next;
}
if(index)
throw std::out_of_range("index >= list.size() :(");
return e->val;
}
size_t size() {
size_t s = 0;
for(el *e = first; e; e = e->next, ++s);
return s;
}
~List() {
el *ne, *e = first;
while(e) {
ne = e->next;
delete e;
e = ne;
}
}
};
class Osoba {
private:
std::string imie;
int wiek;
public:
Osoba() : imie(""), wiek(-1) {}
Osoba(std::string imie, int wiek) : imie(imie), wiek(wiek) {}
void setWiek(int wiek) { this->wiek = wiek; }
void setImie(std::string imie) { this->imie = imie; }
std::string toString() {
std::stringstream wiekStream;
wiekStream << wiek;
return imie+" "+wiekStream.str();
}
};
int main(void) {
List<Osoba> listaOsob;
listaOsob.push_back(Osoba("ABC",16));
listaOsob.push_back(Osoba("DEF",17));
listaOsob.push_back(Osoba("GHI",18));
size_t listaSize = listaOsob.size();
for(size_t i = 0; i < listaSize; ++i)
std::cout << listaOsob.get(i).toString() << std::endl;
listaOsob.get(0).setWiek(26);
listaOsob.get(2).setImie("zmienione GHI");
for(size_t i = 0; i < listaSize; ++i)
std::cout << listaOsob.get(i).toString() << std::endl;
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3RkZXhjZXB0PgojaW5jbHVkZSA8c3N0cmVhbT4KCnRlbXBsYXRlPHR5cGVuYW1lIFR2YWxfdHlwZT4KY2xhc3MgTGlzdCB7CnByaXZhdGU6Cgl0eXBlZGVmIHN0cnVjdCBlbCB7CgkJc3RydWN0IGVsICpuZXh0OwoJCXN0cnVjdCBlbCAqcHJldjsKCQlUdmFsX3R5cGUgdmFsOwoJfSBlbDsKCWVsICpmaXJzdDsKCWVsICpsYXN0OwpwdWJsaWM6CglMaXN0KCkgOiBmaXJzdChOVUxMKSwgbGFzdChOVUxMKSB7fQoJdm9pZCBwdXNoX2JhY2soVHZhbF90eXBlIHZhbCkgewoJCWVsKiBuID0gbmV3IGVsOwoJCW4tPm5leHQgPSBOVUxMOwoJCW4tPnByZXYgPSBsYXN0OwoJCW4tPnZhbCA9IHZhbDsKCQlpZighZmlyc3QgJiYgIWxhc3QpCgkJCWZpcnN0ID0gbjsKCQllbHNlCgkJCWxhc3QtPm5leHQgPSBuOwoJCWxhc3QgPSBuOwoJfQoJVHZhbF90eXBlJiBnZXQoc2l6ZV90IGluZGV4KSB7CgkJZWwgKmUgPSBmaXJzdDsKCQl3aGlsZShpbmRleCAmJiBlKSB7CgkJCS0taW5kZXg7CgkJCWUgPSBlLT5uZXh0OwoJCX0KCQlpZihpbmRleCkKCQkJdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UoImluZGV4ID49IGxpc3Quc2l6ZSgpIDooIik7CgkJcmV0dXJuIGUtPnZhbDsKCX0KCXNpemVfdCBzaXplKCkgewoJCXNpemVfdCBzID0gMDsKCQlmb3IoZWwgKmUgPSBmaXJzdDsgZTsgZSA9IGUtPm5leHQsICsrcyk7CgkJcmV0dXJuIHM7Cgl9Cgl+TGlzdCgpIHsKCQllbCAqbmUsICplID0gZmlyc3Q7CgkJd2hpbGUoZSkgewoJCQluZSA9IGUtPm5leHQ7CgkJCWRlbGV0ZSBlOwoJCQllID0gbmU7CgkJfQoJfQp9OwoKY2xhc3MgT3NvYmEgewpwcml2YXRlOgoJc3RkOjpzdHJpbmcgaW1pZTsKCWludCB3aWVrOwpwdWJsaWM6CglPc29iYSgpIDogaW1pZSgiIiksIHdpZWsoLTEpIHt9CglPc29iYShzdGQ6OnN0cmluZyBpbWllLCBpbnQgd2llaykgOiBpbWllKGltaWUpLCB3aWVrKHdpZWspIHt9Cgl2b2lkIHNldFdpZWsoaW50IHdpZWspIHsgdGhpcy0+d2llayA9IHdpZWs7IH0KCXZvaWQgc2V0SW1pZShzdGQ6OnN0cmluZyBpbWllKSB7IHRoaXMtPmltaWUgPSBpbWllOyB9CglzdGQ6OnN0cmluZyB0b1N0cmluZygpIHsKCQlzdGQ6OnN0cmluZ3N0cmVhbSB3aWVrU3RyZWFtOwoJCXdpZWtTdHJlYW0gPDwgd2llazsKCQlyZXR1cm4gaW1pZSsiICIrd2lla1N0cmVhbS5zdHIoKTsKCX0KfTsKCmludCBtYWluKHZvaWQpIHsKCUxpc3Q8T3NvYmE+IGxpc3RhT3NvYjsKCWxpc3RhT3NvYi5wdXNoX2JhY2soT3NvYmEoIkFCQyIsMTYpKTsKCWxpc3RhT3NvYi5wdXNoX2JhY2soT3NvYmEoIkRFRiIsMTcpKTsKCWxpc3RhT3NvYi5wdXNoX2JhY2soT3NvYmEoIkdISSIsMTgpKTsKCXNpemVfdCBsaXN0YVNpemUgPSBsaXN0YU9zb2Iuc2l6ZSgpOwoKCWZvcihzaXplX3QgaSA9IDA7IGkgPCBsaXN0YVNpemU7ICsraSkKCQlzdGQ6OmNvdXQgPDwgbGlzdGFPc29iLmdldChpKS50b1N0cmluZygpIDw8IHN0ZDo6ZW5kbDsKCglsaXN0YU9zb2IuZ2V0KDApLnNldFdpZWsoMjYpOwoJbGlzdGFPc29iLmdldCgyKS5zZXRJbWllKCJ6bWllbmlvbmUgR0hJIik7CgoJZm9yKHNpemVfdCBpID0gMDsgaSA8IGxpc3RhU2l6ZTsgKytpKQoJCQlzdGQ6OmNvdXQgPDwgbGlzdGFPc29iLmdldChpKS50b1N0cmluZygpIDw8IHN0ZDo6ZW5kbDsKCglyZXR1cm4gMDsKfQ==