Ежедневный бит (е) 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.