Ежедневный бит (е) C++ # 103, Сглаживание представления C++ 20: std::views::join
C++20 std::views::join создаст представление для элементов поддиапазонов. Эффективное объединение поддиапазонов в единый диапазон.
#include <ranges> #include <vector> #include <numeric> std::vector<std::vector<int>> data{{1,2,3},{4,5,6},{7,8,9}}; // Simple join over the 2nd dimension of the array auto view1 = data | std::views::join; // view1 == {1, 2, 3, 4, 5, 6, 7, 8, 9} // Join with a filter, skipping sub-ranges with odd sum auto view2 = data | std::views::filter([](const auto& rng) { return std::accumulate(rng.begin(), rng.end(), 0) % 2 == 0; }) | std::views::join; // view2 == {1, 2, 3, 7, 8, 9}
Откройте пример в Compiler Explorer.