Hej.
chcę stworzyć klasę, której każdy obiekt (poza ostatnim) będzie połączony z poprzednim obiektem - czyli klasa ma wskaźnik na inny obiekt tej klasy. W skrócie wygląda to tak:
class klasa {
public:
klasa(){wsk=nullptr;}
klasa* wsk;
void funkcja();
}
main(){
klasa obiekt[100];
for(int i=0; i<99; i++)
obiekt[i] = &obiekt[i+1];
}
Następnie chcę wywoływać funkcję w każdym obiekcie, który jest połączony z innym obiektem.
Mam dwie możliwości:
- stworzyć funkcję i wywołać ją w każdym obiekcie przy użyciu pętli for np. tak:
for(int i=0; i<99; i++)
obiekt[i].funkcja();
- skorzystać z rekurencji w ten sposób, że funkcja wyglądałaby tak:
funkcja(){
//...algorytm funkcji
if(wsk)
wsk->funkcja();
}
Bardzo mi się podoba to drugie rozwiązanie ;-) i nawet liczyłem, że będzie ono ciut szybsze. Niestety ze wstępnych obliczeń wynika, że jest znacznie wolniejsza (o jakieś 10%).
Czy może mi ktoś wyjaśnić dlaczego to rozwiązanie jest znacznie mniej optymalne? Co na to wpływa?
Przecież pętla for musi za każdym razem sprawdzić warunek i<99 - natomiast w tym drugim przypadku mamy analogicznie sprawdzenie warunku if(wsk) - reszta jest taka sama (wywołanie funkcji na rzecz kolejnego obiektu)...
Z góry dziękuję za wyjaśnienie.
pozdrawiam.