Pętla for oparta na zakresie
Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 15 z 56.
Chociaż tradycyjne pętle for z indeksami dobrze sprawdzają się przy iterowaniu po wektorach, C++ oferuje bardziej eleganckie rozwiązanie: pętlę for opartą na zakresie. Ta nowoczesna składnia eliminuje konieczność ręcznego zarządzania indeksami i sprawia, że kod jest bardziej przejrzysty i łatwiejszy do odczytania.
Pętla for oparta na zakresie automatycznie obsługuje szczegóły iteracji. Zamiast zarządzać zmienną indeksu, po prostu określasz, co chcesz zrobić z każdym elementem:
std::vector<std::string> names = {"Alice", "Bob", "Charlie"};
for (const std::string& name : names) {
std::cout << name << std::endl;
}Ta pętla robi dokładnie to samo co tradycyjne podejście oparte na indeksach, ale ma znacznie prostszą składnię. Zmienna name automatycznie przyjmuje wartość każdego elementu wektora, po kolei.
Możesz zauważyć symbol & w deklaracji pętli: const std::string& name. W tym kontekście & nie oznacza „adresu”, jak mogłeś(-aś) widzieć wcześniej. Tutaj deklaruje on name jako referencję (alias) bezpośrednio do każdego elementu tablicy, zamiast tworzyć jego kopię. Pomyśl o tym jak o nadaniu nowej nazwy tym samym danym, podobnie jak przy użyciu wskaźnika do elementu, ale bez potrzeby jego dereferencji wewnątrz ciała pętli.
Słowo kluczowe const jest środkiem bezpieczeństwa: zapobiega przypadkowej modyfikacji elementu za pośrednictwem aliasu wewnątrz treści pętli. Sam alias nadal przechodzi do każdego kolejnego elementu w każdej iteracji. To zawartość, do której uzyskujesz dostęp za pośrednictwem aliasu, pozostaje niezmienna, a nie przebieg pętli.
Pętla for oparta na zakresie jest nie tylko bardziej czytelna, ale także bezpieczniejsza — nie ma ryzyka błędów indeksowania, ponieważ nie zarządzasz indeksami ręcznie. Działa z każdym kontenerem obsługującym iterację, dzięki czemu jest wszechstronnym narzędziem do przetwarzania zbiorów danych w C++.
Wyzwanie
ŁatwyUtwórz program demonstrujący pętlę for opartą na zakresie, który przetwarza kolekcję nazw miast i wyświetla je wraz z liczbą znaków.
Zostaną podane następujące dane wejściowe:
- Liczba całkowita
nreprezentująca liczbę miast - Następnie
nciągów znaków reprezentujących nazwy miast
Twój program powinien:
- Utworzyć
std::vector<std::string>o nazwiecities - Użyć
push_back(), aby dodać do tablicy wektorowej każdą znnazw miast - Użyć pętli for opartej na zakresie, aby przejść przez tablicę wektorową
- Dla każdego miasta w pętli wyświetlić nazwę miasta, a następnie jej długość za pomocą metody
.length() - Po pętli wyświetlić łączną liczbę przetworzonych miast za pomocą metody wektora
.size()
Użyj dokładnie następującego formatu wyjściowego:
City: [city name] (Length: [number of characters])\nCity: [city name] (Length: [number of characters])\n...\nTotal cities processed: [total count]Pętla for oparta na zakresie powinna używać składni for (const std::string& city : cities), aby przejść przez każdy element tablicy wektorowej. Użyj city.length(), aby uzyskać liczbę znaków w każdej nazwie miasta.
Spróbuj swoich sił
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
// Wczytaj liczbę miast
int n;
cin >> n;
// Utwórz wektor do przechowywania nazw miast
vector<string> cities;
// Wczytaj nazwy miast i dodaj je do wektora
for (int i = 0; i < n; i++) {
string city;
cin >> city;
cities.push_back(city);
}
// TODO: Napisz swój kod poniżej
// Użyj pętli for opartej na zakresie, aby przejść przez wektor cities
// Wypisz każde miasto wraz z długością jego nazwy w podanym formacie
// Po zakończeniu pętli wypisz łączną liczbę przetworzonych miast
return 0;
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Wskaźniki i pamięć
Czym jest wskaźnik?Operator pobrania adresuOperator dereferencjiWskaźniki zeroweWskaźniki i tabliceDynamiczne zarządzanie pamięcią za pomocą „new”Zwalnianie pamięci za pomocą „delete”Podsumowanie — ćwiczenia ze wskaźnikami2Wektory (tablice dynamiczne)
Wprowadzenie do std::vectorTworzenie wektoraDodawanie elementówDostęp do elementówRozmiar wektoraIterowanie za pomocą pętli forPętla for oparta na zakresieUsuwanie elementówPodsumowanie — operacje na wektorach5Projekt: Narzędzie do zarządzania zapasami
Konfiguracja projektuDodawanie i aktualizowanie produktów3Projekt: narzędzie do listy zadań
Przegląd projektuDodawanie zadaniaPoćwicz samodzielnie: Kompilator C++ online