Daily bit(e) C++. std::views::join

Добавлено 14 сентября 2026 в 02:35

Daily bit(e) C++ 103, представление с выравниванием, разворачивающее вложенность, (flattening view) в C++20 – std::views::join.

Daily bit(e) C++

Представление std::views::join из стандарта C++20 позволяет работать с элементами вложенных поддиапазонов так, словно они образуют единый непрерывный диапазон.

#include <ranges>
#include <vector>
#include <numeric>

std::vector<std::vector<int>> data{{1,2,3},{4,5,6},{7,8,9}};

// Простое объединение по второму измерению массива
auto view1 = data | std::views::join;
// view1 == {1, 2, 3, 4, 5, 6, 7, 8, 9}


// Объединение с фильтрацией, пропускающей поддиапазоны
// с нечетной суммой
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

Теги

C++ / CppDaily bit(e) C++Программирование