Ten rodzaj pętli został wprowadzony wraz ze standardem C++11.
Załóżmy, że mamy vector wypełniony wartościami:
std::vector vec = {1, 2, 3, 4};
Jednym z wielu sposobów na wyświetlenie całej zawartości tego vectora jest pętla for i odwoływanie się do jego indeksów:
for (unsigned i = 0; i < vec.size(); i++){ std::cout << vec.at(i) << "
"; }
Innym sposobem jest skorzystanie z iteratorów w pętli for:
for (std::vector::iterator i = vec.begin(); i != vec.end(); i++ ){ std::cout << *i << "
"; }
Jednak najszybszym i najłatwiejszym sposobem jest użycie pętli for range-based:
for (int i: vec){ std::cout << i << "
"; }
Można to zoptymalizować i użyć nowego typu "auto". Oprócz tego, warto jest użyć tzw. const reference w celu zaoszczędzenia pamięci:
for (const auto &i: vec) { std::cout << i << "
"; }
Składnia for range-based loop wygląda tak:
for ( : )
W ostatnim przykładzie zmienna "i" będzie adresem pamięci poszczególnych elementów vectora "vec" (znak &), dzięki czemu nie będziemy niepotrzebnie marnować pamięci. Jest zadeklarowana jako const, żeby mieć pewność, że w środku pętli nic nie zmieni oryginalnej wartości vectora. No i wreszcie po dwukropku podajemy kontener, którym w tym przypadku jest "vec".