C++23 - Vista chunk_by

Introducción

El futuro estándar del lenguaje C++23, actualmente en estado feature freeze, proporciona nuevas y útiles vistas para su biblioteca de rangos, entre ellas [1]:

  • std::views::adjacentstd::views::adjacent_transform
  • std::views::cartesian_product
  • std::views::chunkstd::views::chunk_by
  • std::views::join_with
  • std::views::repeat
  • std::views::slide
  • std::views::stride
  • std::views::zip, std::views::zip_transform

La vista std::views::chunk_by, centro de atención de este post, agrupa elementos contiguos de un rango a través de un predicado binario.  Así, dado un rango de partida R=[T] de elementos de tipo T y un predicado binario P, la vista devolverá un rango de rangos [[T]] donde cada subrango contiene elementos contiguos de R que cumplen la siguiente condición: para cada elemento ei en el subrango a excepción del primero, la evaluación del predicado para el elemento inmediatamente anterior ei-1 y ei es verdadera, i.e., P(ei-1,ei)=true [2, 3]. Es importante señalar que no se requiere que dicho predicado constituya una relación de equivalencia.