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] i tab[i+1]).
  • W wersji bez referencji działa na kopii elementu, co przy dużych obiektach może być nieefektywne.

9. Porównanie klasycznej pętli i foreach

Klasyczna pętla

Foreach