Einen Vektor durchlaufen
Schleifen und Vektoren gehören zusammen. Eine for-Schleife kann die Indizes eines Vektors von 0 bis zum letzten durchgehen und jedes Element lesen:
std::vector<std::string> spiele = {"Handball", "Tennis", "Golf"};
for (int i = 0; i < spiele.size(); i++) {
std::cout << spiele[i] << std::endl;
}Das gibt aus:
Handball
Tennis
GolfDie Variable i nimmt nacheinander die Werte 0, 1 und 2 an, und spiele[i] ist das Element an diesem Index. Die Bedingung verwendet <, nicht <=. Der Vektor hat 3 Elemente, sein letzter Index ist also spiele.size() - 1, das ist 2. Mit <= würde die Schleife auch spiele[3] lesen, ein Element, das es nicht gibt, und das Programm würde Unsinn ausgeben oder abstürzen. Mit spiele.at(i) statt spiele[i] würde es mit einem Fehler anhalten.
Alle Elemente durchzugehen ist so häufig, dass C++ dafür eine kürzere Schreibweise hat, die bereichsbasierte for-Schleife (englisch range-based for):
std::vector<std::string> spiele = {"Handball", "Tennis", "Golf"};
for (std::string spiel : spiele) {
std::cout << spiel << std::endl;
}Handball
Tennis
GolfLies sie als „für jedes spiel in spiele“. In jedem Durchlauf enthält die Variable spiel das nächste Element: zuerst "Handball", dann "Tennis" und dann "Golf". Nach dem letzten Element endet die Schleife. Du brauchst weder einen Index noch size(), also kannst du dich dabei auch nicht verrechnen.
Vor dem Doppelpunkt erstellst du die Variable für die Elemente. Ihr Typ muss der Typ der Elemente sein: std::string bei einem std::vector<std::string>, int bei einem std::vector<int>. Bei einem falschen Typ, zum Beispiel for (int spiel : spiele), meldet Clang error: no viable conversion from 'std::string' to 'int'. Der Name ist dir überlassen. Eine gute Angewohnheit ist, die Variable nach einem einzelnen Element zu benennen: spiel in spiele, preis in preise.
Welche Schleife nimmst du? Die bereichsbasierte for-Schleife, wenn du nur jedes Element brauchst. Die Schleife mit Index, wenn du den Index selbst brauchst, zum Beispiel um die Elemente zu nummerieren, oder wenn du die Elemente verändern willst. In der bereichsbasierten Schleife enthält die Variable eine Kopie des Elements, eine Änderung verändert den Vektor also nicht. Über den Index veränderst du das Element selbst:
std::vector<int> zahlen = {1, 2, 3};
for (int i = 0; i < zahlen.size(); i++) {
zahlen[i] = zahlen[i] * 10;
}
for (int zahl : zahlen) {
std::cout << zahl << std::endl;
}10
20
30So schreibst du es:
Anweisungen
- 1
Schreibe unter der Zeile, die die Anzahl der Freunde ausgibt, eine bereichsbasierte
for-Schleife über den Vektorfreunde. - 2
Gib in der Schleife jeden Freund in einer eigenen Zeile aus:
Anna,Max,LenaundJonas. - 3
Schreibe darunter eine Schleife mit Index, die die Freunde mit ihren Nummern ausgibt:
1. Anna,2. Max,3. Lenaund4. Jonas, jeden in einer eigenen Zeile. Die Nummer ist um eins größer als der Index,i + 1.