Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[c/c++] Pętla for z i++ czy ++i?

terencjoo 24 Paź 2009 18:00 7852 5
  • #1 24 Paź 2009 18:00
    terencjoo
    Poziom 12  

    Wielokrotnie na forach internetowych spotkałem się z zapisem:
    for(i=0 ;i<od czegoś tam; ++i)
    instrukcje;

    Czy to nie jest czasem błąd? Bo jeżeli używa się ++i to jeszcze przed wejściem do instrukcji dla powyższego przypadku i=1! a nie i=0. Natomiast jak daje się i++ to dopiero na końcu instrukcji jest inkrementowane i a więc w instrukcjach operujemy na i=0.

    0 5
  • #2 24 Paź 2009 18:32
    kordirko
    Poziom 21  

    pęta:

    Code:
    for( i=0 ; i<100 ; i++)
    
        kod;


    jest równoważna pętli:
    Code:
      i=0;
    
       while( i < 100 ){
           kod;
           i++;
       }


    Tak więc nieważne czy ++i, czy i++, bo to zostanie wykonane na końcu "okrążenia" pętli (po wykonaniu 'kodu' - przed sprawdzeniem warunku) i zawsze zadziała.

    0
  • #3 24 Paź 2009 19:46
    Dżyszla
    Poziom 42  

    mylisz moment inkrementacji z momentem wykonania instrukcji przejścia w pętli. Najpierw dokonywane jest to, co jest pierwszym "argumentem" for'a, następnie sprawdzany warunek, wykonywane ciało i na końcu wykonywana instrukcja z ostatniego "argumentu" for'a. Dokładnie, jak zapisał poprzednik.

    Znaczenie pots lub preinkrementacji jest wyłącznie w zapisach "inline", czyli gdy jednocześnie zmienna inkrementowana stanowi w tej samej linii kodu argument innej funkcji.

    0
  • #4 24 Paź 2009 20:49
    wrych
    Poziom 20  

    W wyżej opisanej sytuacji pętla for działa w taki sam sposób. Jeśli jednak będzie duża ilość cykli, to czy nie wpłynie to na czas wykonywania programu?
    Znalazłem taką informację Link:
    1) i++ :
    - create a temporary copy of i
    - increment i
    - return the temporary copy

    2) ++i :
    increment i
    return i

    0
  • #6 24 Paź 2009 21:04
    VanThor
    Poziom 19  

    wrych napisał:
    W wyżej opisanej sytuacji pętla for działa w taki sam sposób. Jeśli jednak będzie duża ilość cykli, to czy nie wpłynie to na czas wykonywania programu?
    Znalazłem taką informację Link:
    1) i++ :
    - create a temporary copy of i
    - increment i
    - return the temporary copy

    2) ++i :
    increment i
    return i


    Dla zmiennej typu int (char, long int) nie ma znaczenia jak to zostanie zapisane - kompilator i tak to odpowiednio zoptymalizuje.
    Zapis ten nabiera dużego znaczenia, gdy typem zmiennej będzie klasa ze zdefiniowanymi operatorami pre- i postinkrementacji - tworzenie lokalnej kopii klasy w przypadku postinkrementacji może być kosztowne czasowo.

    0