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, 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.
Vielleicht bemerken Sie das &-Symbol in der Schleifendeklaration — const std::string& name. In diesem Zusammenhang bedeutet & nicht „Adresse von“, wie Sie es vielleicht schon einmal gesehen haben. Hier deklariert es name als eine Referenz (einen Alias) direkt auf jedes Element im Vektor, anstatt eine Kopie davon zu erstellen. Stellen Sie es sich so vor, als würden Sie demselben Datenelement einen neuen Namen geben — ähnlich wie die Verwendung eines Pointers auf das Element, aber ohne es innerhalb des Schleifenkörpers dereferenzieren zu müssen.
Das Schlüsselwort const ist eine Sicherheitsmaßnahme: Es verhindert, dass Sie das Element versehentlich über den Alias innerhalb des Schleifenkörpers ändern. Der Alias selbst rückt bei jeder Iteration immer noch zu jedem neuen Element vor — es ist der Inhalt, auf den Sie über den Alias zugreifen, der konstant gehalten wird, nicht der Fortschritt der Schleife.
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.
Aufgabe
EinfachErstellen Sie ein Programm, das die bereichsbasierte for-Schleife (range-based for loop) 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
nStrings, die Städtenamen darstellen
Ihr Programm sollte:
- Einen
std::vector<std::string>namenscitieserstellen push_back()verwenden, um jeden dernStädtenamen zum Vektor hinzuzufügen- Eine bereichsbasierte for-Schleife verwenden, um durch den Vektor zu iterieren
- Für jede Stadt in der Schleife den Städtenamen gefolgt von seiner Länge unter Verwendung der
.length()-Methode ausgeben - 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.
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 durch den cities-Vektor zu iterieren
// Gib jede Stadt mit ihrer Länge im angegebenen Format aus
// Gib nach der Schleife die Gesamtzahl der verarbeiteten Städte aus
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Pointer und Speicher
Was ist ein Pointer?AdressoperatorDereferenzierungsoperatorNull-PointerPointer und ArraysDynamischer Speicher mit 'new'Speicher freigeben mit 'delete'Zusammenfassung – Pointer-Übung2Vektoren (Dynamische Arrays)
Einführung in std::vectorEinen Vector erstellenElemente hinzufügenAuf Elemente zugreifenVector-GrößeIterieren mit einer For-SchleifeRange-based For-SchleifeElemente entfernenZusammenfassung – Vector-Operationen3Projekt: Aufgabenlisten-Tool
ProjektübersichtEine Aufgabe hinzufügen