C++-manual
Förutgående | Kapitel 5. Iteration | Nästa

# `for`-slingor

Denna typ av slinga är den mest flexibla och troligtvis den mest använda av de tre typerna av slingor i C++. Den tillåter relativt avancerad iteration med hjälp av en enda slinga. Den allmänna formen för en `for`-slinga är:

    for ( initiering; villkor; inkrementering )
        sats

Slingan har tre olika moment som utförs vid olika tidpunkt då slingan utförs:

1. initiering som utförs en enda gång då slingan skall starta. Här kan en variabel t.ex. initieras till ett startvärde.

2. villkor som avgör när slingan skall sluta. Detta villkor fungerar på samma sätt som `while`-slingans, och skall evalueras till `true` eller `false`. Slingan utförs så länge villkoret evalueras till `true`. Villkoret kontrolleras före varje exekvering av slingans kropp.

3. inkrementering används för att ändra värdet på t.ex. en variabel som kontrollerar slingan. Denna utförs efter varje exekvering av slingans kropp.

`for`-slingan är mycket kraftfull och flexibel tack vare de tre olika deluttrycken som kan hanteras totalt oberoende av varandra. Ett exempel på en slinga som summerar talen 1 till 10 kan se ut som nedan:

    // beräknar en summa av talen 1 till 10
    int Index;
    int Summa = 0;
    for ( Index = 1; Index <= 10; Index++ ) {
        Summa = Summa + Index;
    }
    cout << "Summan är: " << Summa << "\n";

I slingans initieringsdel som utförs en gång initieras `Index` till 0. Denna del utförs endast en gång. Därefter utförs villkorsdelen som ju kommer att evalueras till `true` så länge som `Index` <= 10. Slingans kropp utförs därefter och summan ökas. Därefter utförs inkrementeringsdelen som ökar `Index` med 1, varpå villkorsdelen kollas igen och slingan fortsätter. `for`-slingor kan verka kryptiska till en början, men efterhand lär man sig uppskatta dess kraftfulla syntax som ger möjligheter till diverse flexibla och kompakta kontruktioner. Ett exempel som gavs ovan som skriver ut talen 1 till 100 i en fyrkant kan med hjälp av `for`-slingor se ut som nedan:

    for ( int Rad = 0; Rad < 100; Rad += 10 ) {
        for ( int Kolumn = 0; Kolumn < 10; Kolumn++ ) {
            // skriv ut ett tal
            cout << Rad + Kolumn << " ";
       }
       // en rad full, gå till nästa rad
       cout << "\n";
    }

Detta exempel visar hur den yttre slingan använder sig av ett speciellt inkrementeringssteg där raden ökas med 10 per iteration. Exemplet använder sig även av möjligheten att i C++ deklarera variabler där de behövs. I exemplet är `Rad` och `Kolumn` deklarerade i slingornas initieringsdelar. Deras omfång (scope) är således endast inom slingorna. Detta är ett praktiskt sätt att deklarera temporära iterationsvariabler då de behövs.

Man behöver inte fylla i alla de tre delarna av en `for`-slinga. Om det t.ex. inte finns någon naturlig initieringssats kan man lämna bort denna. Lämnar man bort alla delar får man en evig slinga:

    // en evig slinga
    for ( ; ; ) {
      cout << "Hello, forever!" << endl;
    }

Det är dock normalt endast i specialfall man vill lämna någon del tom.

Förutgående | Hem | Nästa
`do-while`-slingor | Upp | Avbryta och fortsätta slingor