Avatar billede duesjov Nybegynder
14. december 2007 - 22:30 Der er 10 kommentarer og
1 løsning

pre og post increment

hey, sidder og arbejder mig igennem en begynder bog.

og indtil nu troede jeg at jeg havde forstået det med inkrementering, men nu er jeg lidt lost igen

    for(int i = 0; i < inventory.size(); ++i)
        cout << i << ": " << inventory[i] << endl;

et simpelt loop med en pre inkrementering af i. her troede jeg så i vil blive inkrementeret inden linie 2 startede.

    for(int i = 0; i < inventory.size(); i++)
        cout << i << ": " << inventory[i] << endl;

endnu et simpelt  loop, med post inkrementering af i, her havde jeg forstået det sådan at i først vil blive inkrementeret når loopet var nået til ende og skulle til at starte forfra.

men når jeg kompilerer de to loops, så er i konstant 0 i første loop. nogen der kan forklarer hvorfor, eller fortælle hvor jeg har misforstået noget.
Avatar billede arne_v Ekspert
14. december 2007 - 22:36 #1
forskellen gaelder kun indenfor samme saetning !
Avatar billede arne_v Ekspert
14. december 2007 - 22:36 #2
Proev foelgende:

#include <iostream>

using namespace std;

int main()
{
    int i = 1;
    cout << i << endl;
    cout << (i++) << endl;
    cout << i << endl;
    int j = 1;
    cout << j << endl;
    cout << (++j) << endl;
    cout << j << endl;
    return 0;
}
Avatar billede duesjov Nybegynder
14. december 2007 - 22:48 #3
når man sætter det op sådan kan jeg også sagtens se logikken i det.

men  hvis vi så tager det her loop
for(int i = 0; i < inventory.size(); ++i)
        cout << i << ": " << inventory[i] << endl;

skulle i så ikke være  "1" første gang linie to bliver kørt
Avatar billede duesjov Nybegynder
14. december 2007 - 23:06 #4
eller fungerer det anderledes i forbindelse med for loop`?
Avatar billede arne_v Ekspert
14. december 2007 - 23:07 #5
for(int i = 0; i < inventory.size(); ++i)
        cout << i << ": " << inventory[i] << endl;

betyder:

int i = 0;
while(i < inventory.size())
{
    cout << i << ": " << inventory[i] << endl;
    ++i;
}
Avatar billede duesjov Nybegynder
14. december 2007 - 23:12 #6
ahh ok, så er der jo ligepludselig lidt mere logik i det!
takker for infoen,

smid et svar så får du point.

lige til sidst
det betyder vel så også at der ingen forskel er på at bruge ++i og i++?
Avatar billede duesjov Nybegynder
15. december 2007 - 00:13 #7
retter lige lidt på spørgsmålet,

det betyder vel så også at der ingen forskel er på at bruge ++i og i++ når det er i et for loop.
Avatar billede erikjacobsen Ekspert
15. december 2007 - 00:18 #8
Der er ingen forskel i at bruge ++i og i++ som enkelt statement.

Der er (kan være) forskel når du bruger det i et udtryk. Prøv

  int j=0;
  int j1=j++;

  int k=0;
  int k1=++k;

Nu vil j1 og k1 have 2 forskellige værdier.
Avatar billede arne_v Ekspert
15. december 2007 - 01:21 #9
Der er ingen funktionel forskel i et for loop.

Jeg mener at der for 15-20 år siden var en compiler der genererede hurtigere kode
ved ++i end ved i++ og derfor er der nogen som stadig hævder at ++i er det bedste.

Jeg vil altid lave en for løkke med i++ fordi jeg mener at ++i er læseren til at
spilde tid på at spekulere over om der nu er en forskel.
Avatar billede arne_v Ekspert
15. december 2007 - 01:21 #10
og et svar
Avatar billede bitmatic Nybegynder
15. december 2007 - 11:25 #11
Det er ikke helt rigtigt at der ikke er forskel i et for-loop....

Funktionelt vil de to for-loops godt nok virke ens, men hvis "i" er en kompleks type, så vil i++ være langsommere end ++i. Der kan derfor være en ide i at vænne sig til at skrive ++i i for-loops.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester