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.