• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ktore z tych rozwiązań jest bardziej wydajne?

–1 głos
487 wizyt
pytanie zadane 30 grudnia 2015 w C i C++ przez Daaa22 Dyskutant (8,250 p.)

1.

cin >> wyb;
if(wyb==1)
{
nic++;
}
if(wyb==2)
{
nic--;
}
if(wyb==3)
{
nic=0;
}
else
{
nic=nic;
}

2.

cin >> wyb;
if(wyb==1)
{
nic++;
}
else if(wyb==2)
{
nic--;
}
else if(wyb==3)
{
nic=0;
}
else
{
nic=nic;
}

 

4 odpowiedzi

+1 głos
odpowiedź 30 grudnia 2015 przez Macek Kolo Mądrala (5,480 p.)
wybrane 31 grudnia 2015 przez Daaa22
 
Najlepsza
Jeśli nie masz przedziałów to switch, rozwiązanie bez else if będzie sprawdzało wszystkie warunki if po kolei, ale nie ma to znaczenia przy tak małej ilości danych. W takich sytuacjach nawet nie ma co mówić który wydajniejszy.
komentarz 30 grudnia 2015 przez Daaa22 Dyskutant (8,250 p.)
Powiedzmy, że w 1 jest milion if, a w drugim milion else if. Który sprawdzi wszystko szybciej?
komentarz 30 grudnia 2015 przez fckueve Dyskutant (9,470 p.)
oczywiście że else if'y będą działały szybciej.

jeżeli będziesz miał milion ifów, każdy będzie sprawdzał warunek. Jeżeli będziesz miał milion else ifów, po czy np: setny okaże się prawdą, reszta, czyli 999900 else ifów zostanie pominięta
+2 głosów
odpowiedź 30 grudnia 2015 przez juriiw Gaduła (3,470 p.)

Mi się wydaje, że opcja z else ifem będzie szybsza w większości przypadków. Dlatego, że w przypadku pierwszym niezależnie od wyniku testu logicznego program przeskoczy do następnego if-a i będzie poddawał testowi następne zadanie. Natomiast w drugim przypadku jeśli  pierwszy if będzie równy true, to nie sprawdzi kolejnych dwóch else ifów...i tutaj widziałbym oszczędność. Oczywix switch (jak już ktoś powiedział wcześniej) byłby szybszy i "elegantszy".

 

+2 głosów
odpowiedź 30 grudnia 2015 przez adrian17 Mentor (355,240 p.)

W tym konkretnym przypadku? Praktycznie nie ma różnicy. To znaczy: kompilator jest na tyle sprytny, że potrafi poznać, że jeśli wyb==1 jest spełniony, to wyb==2 nie będzie. Ba, przepuściłem oba przypadki przez Clanga z -O i dla obu wygenerował dokładnie taki sam kod.

W ogólnym przypadku? Twój kod powinien odpowiadać temu, jak program ma się zachowywać. Przypadek drugi jest bliższy zamierzeniu programisty i z samego tego powodu powinien być preferowany.

+1 głos
odpowiedź 30 grudnia 2015 przez Rogargol Pasjonat (16,610 p.)
To zalezy od wartosci wyb. Jeśli wyb jest np rowne 20 to praktycznie wychodzi na to samo, albo wydajniejsze jest odrobine pierwsze rozwiazanie, bo nie posiada elsow.

W momencie jesli jest rowne np 1, 2, to wydajeniejsze jest drugie.
komentarz 30 grudnia 2015 przez Daaa22 Dyskutant (8,250 p.)
Powiedzmy, że mam milion if, a w drugim milion else if. Który sprawdzi warunki szybciej?
komentarz 30 grudnia 2015 przez Rogargol Pasjonat (16,610 p.)
tak jak pisalem, w przypadku jesli warunek zostanie spelniony szybko (tzn w jednym z pierwszych ifow) to szybciej zadziala instrukcja z elsem, bo nie bedzie juz wykonywac dalszych instrukcji. Jesli natomiast zostanie spelniony w jednym z ostatnich, lub w ogole nie zostanie spelniony to odrobine szybciej teoretycznie zadziala ten bez elsow. Tak czy inaczej, sa ta bardzo marginalne roznice.

Podobne pytania

0 głosów
1 odpowiedź 230 wizyt
pytanie zadane 25 listopada 2015 w SQL, bazy danych przez Szymon Lisowiec Mądrala (7,150 p.)
0 głosów
1 odpowiedź 190 wizyt
+1 głos
1 odpowiedź 267 wizyt

93,776 zapytań

142,732 odpowiedzi

323,384 komentarzy

63,379 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...