Ежедневный бит (е) C ++ # 180, цикл range-for как замена необработанных циклов.
Цикл на основе диапазона был введен в C++11; однако только с введением представлений C++20 он может заменить почти все экземпляры необработанных циклов for.
#include <algorithm> #include <vector> #include <ranges> // C++11: iterate over values in an initializer list for (auto v : {1, 1, 2, 3, 5, 8, 13}) {} // C++20: iterate over [1,10), values 1..9 for (auto v : std::views::iota(1, 10)) {} // C++20: downward iteration 5..-5 for (auto v : std::views::iota(-5, 6) | std::views::reverse) {} std::vector<int> data{1, 2, 3, 4, 5, 6, 7, 8, 9}; auto it = std::ranges::lower_bound(data, 5); // C++20: iterating over sub-range, 1..4 for (auto v : std::ranges::subrange(data.begin(), it)) {} // C++20: iterating over sub-range, 5..9 for (auto v : std::ranges::subrange(it, data.end())) {} // C++23: nested loop replacement // iterate over i==[0,5), j==[0,5) for (auto [i,j] : std::views::cartesian_product( std::views::iota(0,5), std::views::iota(0,5))) {}
Откройте пример в Compiler Explorer.