Menu
Coddy logo textTech

Range-based For-Schleife

Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy — Lektion 15 von 56.

Während traditionelle for-Schleifen mit Indizes gut für das Iterieren durch Vektoren funktionieren, bietet C++ eine elegantere Lösung: die bereichsbasierte for-Schleife (range-based for loop). Diese moderne Syntax macht die manuelle Indexverwaltung überflüssig und sorgt für saubereren sowie leichter lesbaren Code.

Die bereichsbasierte for-Schleife übernimmt automatisch die Iterationsdetails für Sie. Anstatt eine Indexvariable zu verwalten, geben Sie einfach an, was Sie mit jedem Element tun möchten:

std::vector<std::string> names = {"Alice", "Bob", "Charlie"};

for (const std::string& name : names) {
    std::cout << name << std::endl;
}

Diese Schleife macht genau dasselbe wie der traditionelle indexbasierte Ansatz, aber mit einer viel einfacheren Syntax. Die Variable name nimmt automatisch nacheinander den Wert jedes Elements im Vektor an.


Beachten Sie das & in const std::string& name. Hier bedeutet & nicht „Adresse von“, wie Sie es vielleicht schon einmal gesehen haben – in einer Variablendeklaration wie dieser bedeutet es Referenz (oder Alias). Anstatt jedes Element zu kopieren, wird name zu einem Alias, der direkt auf das Element im Vektor verweist, ähnlich wie bei der Verwendung eines Pointers, aber ohne dass dieser innerhalb des Schleifenkörpers dereferenziert werden muss.

Das Schlüsselwort const ist eine Sicherheitsmaßnahme: Es verhindert, dass Sie das Element versehentlich über den Alias innerhalb des Schleifenkörpers ändern, sodass die ursprünglichen Vektordaten unverändert bleiben.

Die bereichsbasierte for-Schleife ist nicht nur lesbarer, sondern auch sicherer – es besteht kein Risiko von Indexfehlern, da Sie Indizes nicht manuell verwalten. Sie funktioniert mit jedem Container, der Iteration unterstützt, was sie zu einem vielseitigen Werkzeug für die Verarbeitung von Datensammlungen in C++ macht.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das die bereichsbasierte for-Schleife demonstriert, indem es eine Sammlung von Städtenamen verarbeitet und diese zusammen mit ihrer Zeichenanzahl anzeigt.

Die folgenden Eingaben werden bereitgestellt:

  • Ein Integer n, der die Anzahl der Städte darstellt
  • Anschließend n Strings, die Städtenamen darstellen

Ihr Programm sollte:

  1. Einen std::vector<std::string> namens cities erstellen
  2. push_back() verwenden, um jeden der n Städtenamen zum Vektor hinzuzufügen
  3. Eine bereichsbasierte for-Schleife verwenden, um durch den Vektor zu iterieren
  4. Für jede Stadt in der Schleife den Städtenamen gefolgt von seiner Länge unter Verwendung der .length()-Methode ausgeben
  5. Nach der Schleife die Gesamtzahl der verarbeiteten Städte unter Verwendung der .size()-Methode des Vektors ausgeben

Verwenden Sie das folgende exakte Ausgabeformat:

City: [city name] (Length: [number of characters])\nCity: [city name] (Length: [number of characters])\n...\nTotal cities processed: [total count]

Die bereichsbasierte for-Schleife sollte die Syntax for (const std::string& city : cities) verwenden, um durch jedes Element im Vektor zu iterieren. Verwenden Sie city.length(), um die Anzahl der Zeichen in jedem Städtenamen zu erhalten.

Spickzettel

Die bereichsbasierte for-Schleife iteriert durch einen Container ohne manuelle Indexverwaltung:

std::vector<std::string> names = {"Alice", "Bob", "Charlie"};

for (const std::string& name : names) {
    std::cout << name << std::endl;
}
  • & deklariert name als eine Referenz (Alias) auf jedes Element — kein Kopieren
  • const verhindert eine versehentliche Änderung des Elements innerhalb des Schleifenkörpers
  • Funktioniert mit jedem Container, der Iteration unterstützt

Probier es selbst

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    // Lies die Anzahl der Städte ein
    int n;
    cin >> n;
    
    // Erstelle einen Vektor, um Städtenamen zu speichern
    vector<string> cities;
    
    // Lies Städtenamen ein und füge sie dem Vektor hinzu
    for (int i = 0; i < n; i++) {
        string city;
        cin >> city;
        cities.push_back(city);
    }
    
    // TODO: Schreibe deinen Code unten
    // Verwende eine bereichsbasierte for-Schleife, um den cities-Vektor zu durchlaufen
    // Gib jede Stadt mit ihrer Länge im angegebenen Format aus
    // Gib nach der Schleife die Gesamtzahl der verarbeiteten Städte aus
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf