Pętla foreach (range-based for)
1. Wprowadzenie
- Od C++11 wprowadzono pętlę foreach (nazywaną też range-based for).
- Umożliwia prostą i czytelną iterację po wszystkich elementach tablicy, wektora lub innego kontenera STL.
- Dzięki niej unikamy błędów związanych z ręcznym sterowaniem indeksem.
2. Składnia
- deklaracja – zmienna, do której przypisywana jest wartość aktualnego elementu.
- kolekcja – obiekt, po którym iterujemy (np. tablica,
std::vector,std::array,std::list,std::map).
3. Przykład – tablica statyczna
Wynik:
1 2 3 4 5
4. Przykład – wektor
5. Wersje z referencją
Kopiowanie wartości
Odwołanie przez referencję
Odwołanie przez referencję stałą
6. Pętla foreach a zakresy (C++20 – ranges)
Od C++20 można używać std::ranges, aby łączyć pętlę foreach z filtrami i transformacjami:
7. Zalety
- Czytelność – prostsza i bardziej intuicyjna od klasycznej pętli
for. - Bezpieczeństwo – nie trzeba ręcznie pilnować indeksu i rozmiaru tablicy.
- Uniwersalność – działa z dowolnym kontenerem STL i tablicami.
8. Wady / ograniczenia
- Brak dostępu do indeksu (jeśli jest potrzebny, lepiej użyć klasycznego
for). - Trudniejsza manipulacja w strukturach wymagających równoczesnego dostępu do kilku elementów (np. w przypadku porównań
tab[i]itab[i+1]). - W wersji bez referencji działa na kopii elementu, co przy dużych obiektach może być nieefektywne.