Może mi ktoś wytłumaczyć pętle "range-based loop"?

Może mi ktoś wytłumaczyć pętle "range-based loop"?
Odpowiedź

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".

Dodaj swoją odpowiedź