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

Представление 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}
