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

Добавлено 26 августа 2026 в 13:27

Daily bit(e) C++ 89, представление в C++23, которое разбивает данные на части на основе заданного бинарного предиката.

Daily bit(e) C++

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

Пример на Compiler Explorer

Теги

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