Witajcie :-)
Mam problem z następującym zagadnieniem. Mam stworzyć symulację obrazującą model Lotki-Volterry (model drapieżnik-ofiara). Deklaruję sobie klasę gatunek, w której mam pola czas i dl_zyc. dl_zyc jest zrandomizowana w konstruktorze. I jeszcze w tej klasie jest procedura inkrementująca czas, dajmy na to zegar_biol().
Potem w module głównym tworzę listę obiektów klasy gatunek wykorzystującą bibliotekę stl. Oczywiście wymagane biblioteki są już dołączone.
class gatunek
{
public:
int czas; //aktualny czas życiowy
int dl_zyc; //długość życia
gatunek(){czas=0; dl_zyc=1000+1000*Random();}
~gatunek(){}
void zegar_biol(){czas++;}
};
list<gatunek>G //tworzę listę obiektów typu gatunek
for(int i=0;i<10;i++) //tworzę nowe obiekty na końcu listy
G.push_back(gatunek());
Ostatecznie chciałem stworzyć dwie klasy potomne: drapieżnik oraz ofiara, listy tych obiektów. Wszystko chciałem przedstawić na wykresie (tu akurat mam już gotowe biblioteki, więc problemu nie będzie). Zostaje to jednak pokrzyżowane poprzez moją nieumiejętność posługiwania się listami stl. Ten kawałek kodu, który napisalem wyżej działa niby poprawnie, bo na wykresie jest odpowiednia wielkość tablicy (to też już umiem - G.size() zwraca ilość elementów tablicy). Jak w pętli symulacji dam G.push_back(gatunek()), to wielkość listy się będzie zwiększać. Czyli to niby jest ok.
Nie wiem, jak wywołać procedurę zegar_biol() dla wszystkich elementów listy. Nie może to być procedura typu static. Dalej - nie wiem, jak wykorzystać procedurę przypisaną do listy, a mianowicie G.remove_if(), bo chcę usuwać te obiekty z listy, których wartość czas jest większa od dl_zyc.
Proszę o pomoc.
Pozdrawiam.