Daily bit(e) C++. std::views::chunk_by
Добавлено 26 августа 2026 в 13:27
Daily bit(e) C++ 89, представление в C++23, которое разбивает данные на части на основе заданного бинарного предиката.

Представление std::views::chunk_by из C++23 аналогично представлению std::views::split из C++20; однако, в отличие от split, оно работает, используя бинарный предикат.
Новый фрагмент будет начинаться между двумя проверяемыми элементами, когда предикат возвращает false.
#include <ranges>
#include <vector>
#include <cmath>
#include <algorithm>
#include <iostream>
std::vector<int> data{1,2,-4,-2,-1,8,7,3,4,-5,-5};
auto same_sign = [](int left, int right){
return std::signbit(left) == std::signbit(right);
};
for (const auto& chunk : data | std::views::chunk_by(same_sign))
{
// Пройтись по фрагментам:
// {1,2}, {-4,-2,-1}, {8,7,3,4}, {-5,-5}
std::ranges::copy(chunk, std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
}
