Espacios de nombres
Variantes
Acciones

std::ranges::views::lazy_split, std::ranges::lazy_split_view

De cppreference.com
< cpp‎ | ranges
 
 
Biblioteca de rangos
Adaptadores de rangos
 
 
Definido en el archivo de encabezado <ranges>
template<ranges::input_range V, ranges::forward_range Pattern >

requires ranges::view<V>&&ranges::view<Pattern>&&
  std::indirectly_comparable<ranges::iterator_t<V>, ranges::iterator_t<Pattern>,
                             ranges::equal_to>&&
  (ranges::forward_range<V>||/*rango_diminuto*/<Pattern>)

class lazy_split_view :publicranges::view_interface<lazy_split_view<V, Pattern>>
(1) (desde C++20)
namespace views {

    inlineconstexpr/*no especificado*/ lazy_split =/*no especificado*/;

}
(2) (desde C++20)
Signatura de la llamada
template<ranges::viewable_range R, class Pattern >

    requires /* véase a continuación */

constexprranges::viewauto lazy_split( R&& r, Pattern&& pattern );
(desde C++20)
template<class Pattern >
constexpr/*cierre de adaptador de rango*/ lazy_split( Pattern&& pattern );
(desde C++20)
Conceptos auxiliares
template<class R >

concept /*rango_diminuto*/=      // solo exposición
  ranges::sized_range<R>&&
    requires /*tiene-un-tamaño-constexpr-estático*/<R>&&

      (std::remove_reference_t<R>::size()<=1);
(3) (desde C++20)
1)lazy_split_view toma una vista (view) y un delimitador, y parte la vista en subrangos en el delimitador.

Se apoyan dos escenarios principales:

2)Objeto adaptador de rango. La expresión views::lazy_split(e, f) es equivalente en expresión a lazy_split_view(e, f).
3) El concepto solo de exposición /*rango_diminuto*/<Pattern> se satisface si Pattern satisface sized_range, Pattern::size() es una expresión constante y adecuada como un argumento de plantilla de no tipo, y el valor de Pattern::size() es menor que o igual a 1. Notablemente, empty_view y single_view satisfacen este concepto.

lazy_split_view modela los conceptos forward_range y input_range cuando la vista subyacente V modela los conceptos respectivos, y modela common_range cuando V modela tanto forward_range como common_range.

El rango interno (ranges::range_reference_t<lazy_split_view>) modela los conceptos forward_range y input_range cuando la vista subyacente V modela los conceptos respectivos. No modela common_range, y no puede usarse con algoritmos que esperan un bidirectional_range o más alto.

Contenido

[editar]Datos miembro

Las implementaciones típicas de lazy_split_view mantienen dos o tres datos miembro no estáticos:

  • la vista subyacente de tipo V (que se muestra aquí como base_ solo de exposición),
  • el patrón (que se muestra aquí como pattern_ solo de exposición) que se utiliza como delimitador para dividir la vista subyacente, y
  • el objeto almacenador en caché (que se muestra aquí como current_ solo de exposición) del tipo solo de exposición similar astd::optional/*no_propagador_de_caché*/<ranges::iterator_t<V>>. current_ almacena en caché el resultado de las llamadas a begin(). Está presente solo si V no satisface forward_range.

[editar]Funciones miembro

Construye un objeto lazy_split_view
(función miembro pública)[editar]
(C++20)
Devuelve una copia de la vista (adaptada) subyacente.
(función miembro pública)[editar]
(C++20)
Devuelve un iterador al comienzo.
(función miembro pública)[editar]
(C++20)
Devuelve un iterador o un centinela al final.
(función miembro pública)[editar]
Heredadas de std::ranges::view_interface
(C++20)
Devuelve si la vista derivada está vacía o no. Se proporciona si la vista derivada satisface forward_range.
(función miembro pública de std::ranges::view_interface<D>)[editar]
Devuelve si la vista derivada está vacía o no. Se proporciona si ranges::empty le es aplicable.
(función miembro pública de std::ranges::view_interface<D>)[editar]
(C++20)
Devuelve el primer elemento en la vista derivada. Se proporciona si la vista derivada satisface forward_range.
(función miembro pública de std::ranges::view_interface<D>)[editar]

[editar]Clases anidadas

El tipo iterador.
(plantilla de clase miembro de solo exposición)
El tipo centinela del rango interno.
(plantilla de clase miembro de solo exposición)

[editar]Guías de deducción

[editar]Notas

lazy_split_view se introdujo por el informe de defecto P2210R2 posterior a C++20. Tiene el mismo mecanismo perezoso que el de la vista split_view antigua antes del cambio.

[editar]Ejemplo

#include <algorithm>#include <iostream>#include <ranges>#include <string_view>   // P2210R2: un parche temporal hasta que se use g++ en línea >= 12#define lazy_split_view split_view#define lazy_split split   auto imprimir =[](autoconst& view){// `view` es una vista std::views::lazy_split_view::/*outer_iterator*/::value_type   for(std::cout<<"{ ";constauto elemento : view)std::cout<< elemento <<' ';std::cout<<"} ";};   int main(){constexprstaticauto fuente ={0, 1,0, 2,3,0, 4,5,6,0, 7,8,9};constexprint delimitador {0};constexpr std::ranges::lazy_split_view vista_externa{fuente, delimitador};std::cout<<"divisiones["<< std::ranges::distance(vista_externa)<<"]: ";for(autoconst& vista_interna: vista_externa) imprimir(vista_interna);   constexprstd::string_view hola {"Hola C++ 20 !"};std::cout<<"\n""subcadenas: "; std::ranges::for_each(hola | std::views::lazy_split(' '), imprimir);   constexprstd::string_view texto {"Hola-+-C++-+-20-+-!"};constexprstd::string_view delim {"-+-"};std::cout<<"\n""subcadenas: "; std::ranges::for_each(texto | std::views::lazy_split(delim), imprimir);}

Salida:

divisiones[5]: { } { 1 } { 2 3 } { 4 5 6 } { 7 8 9 } subcadenas: { H o l a } { C + + } { 2 0 } { ! } subcadenas: { H o l a } { C + + } { 2 0 } { ! }

[editar]Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
P2210R2 C++20 La vista split_view antigua era demasiado perezosa para usarse fácilmente. Mueve su funcionalidad a lazy_split_view

[editar]Véase también

Una vista (view) sobre los subrangos obtenidos al dividir otra vista usando un delimitador.
(plantilla de clase)(objeto adaptador de rango)[editar]
Una vista (view) que consiste en la secuencia obtenida al aplanar una vista de rangos (range).
(plantilla de clase)(objeto adaptador de rango)[editar]
close