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.
Aufgabe
EinfachErstellen 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
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.
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;
}&deklariertnameals eine Referenz (Alias) auf jedes Element — kein Kopierenconstverhindert 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;
}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