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 zum Durchlaufen von Vektoren geeignet sind, bietet C++ eine elegantere Lösung: die for-Schleife auf Basis eines Bereichs. Diese moderne Syntax macht die manuelle Verwaltung von Indizes überflüssig und sorgt dafür, dass dein Code übersichtlicher und leichter zu lesen ist.

Die bereichsbasierte for-Schleife übernimmt die Details der Iteration automatisch für dich. Anstatt eine Indexvariable zu verwalten, gibst du einfach an, was du mit jedem Element tun möchtest:

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

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

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

Vielleicht fällt dir das Symbol & in der Schleifendeklaration auf: const std::string& name. In diesem Kontext bedeutet & nicht „Adresse von“, wie du es vielleicht schon einmal gesehen hast. Hier deklariert es name als Referenz (Alias) direkt auf jedes Element im Vektor, anstatt eine Kopie davon zu erstellen. Stell es dir so vor, als würdest du denselben Daten eine neue Bezeichnung geben – ähnlich wie bei der Verwendung eines Zeigers auf das Element, jedoch ohne es im Schleifenrumpf dereferenzieren zu müssen.

Das Schlüsselwort const ist eine Sicherheitsmaßnahme: Es verhindert, dass du das Element versehentlich über den Alias im Schleifenrumpf änderst. Der Alias selbst geht weiterhin mit jeder Iteration zum nächsten Element über. Es ist der Inhalt, auf den du über den Alias zugreifst, der konstant gehalten wird, nicht der Fortschritt der Schleife.

Die bereichsbasierte for-Schleife ist nicht nur besser lesbar, sondern auch sicherer – es besteht kein Risiko von Indexfehlern, da du Indizes nicht manuell verwalten musst. Sie funktioniert mit jedem Container, der Iteration unterstützt, und ist damit ein vielseitiges Werkzeug zur Verarbeitung von Datensammlungen in C++.

challenge icon

Aufgabe

Einfach

Erstelle ein Programm, das die bereichsbasierte for-Schleife demonstriert, indem es eine Sammlung von Städtenamen verarbeitet und sie mit ihrer Zeichenanzahl ausgibt.

Die folgenden Eingaben werden bereitgestellt:

  • Eine Ganzzahl n, die die Anzahl der Städte angibt
  • Danach n Zeichenfolgen, die Städtenamen darstellen

Dein 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 den Vektor zu durchlaufen
  4. Für jede Stadt in der Schleife den Stadtnamen gefolgt von seiner Länge mithilfe der Methode .length() ausgeben
  5. Nach der Schleife die Gesamtzahl der verarbeiteten Städte mithilfe der Methode .size() des Vektors ausgeben

Verwende 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 jedes Element im Vektor zu durchlaufen. Verwende city.length(), um die Anzahl der Zeichen in jedem Städtenamen zu ermitteln.

Probier es selbst

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

int main() {
    // Lies die Anzahl der Städte
    int n;
    cin >> n;
    
    // Erstelle einen Vektor, um Städtenamen zu speichern
    vector<string> cities;
    
    // Lies Städtenamen 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 darunter
    // Verwende eine range-basierte for-Schleife, um durch den cities-Vektor zu iterieren
    // Gib jede Stadt mit ihrer Länge im angegebenen Format aus
    // After the loop, print the total number of cities processed
    
    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

Übe selbstständig: Online-C++-Compiler