std::ranges:: views:: split, std::ranges:: split_view
|
Definido en el encabezado
<ranges>
|
||
|
template
<
ranges::
forward_range
V,
ranges::
forward_range
Pattern
>
requires
ranges::
view
<
V
>
&&
|
(1) | (desde C++20) |
|
namespace
views
{
inline
constexpr
/* no especificado */
split
=
/* no especificado */
;
|
(2) | (desde C++20) |
|
Firma de llamada
|
||
|
template
<
ranges::
viewable_range
R,
class
Pattern
>
requires
/* ver más abajo */
|
(desde C++20) | |
|
template
<
class
Pattern
>
constexpr /* cierre adaptador de rango */ split ( Pattern && pattern ) ; |
(desde C++20) | |
split_view
toma una
view
y un delimitador, y divide la
view
en subrangos basándose en el delimitador.
split_view
modela los conceptos
forward_range
, y
common_range
cuando la
view
subyacente
V
modela los respectivos conceptos.
El rango interno (
ranges::
range_reference_t
<
split_view
>
) es un
ranges::
subrange
<
ranges::
iterator_t
<
V
>>
, que modela
common_range
, modela
sized_range
cuando
ranges::
iterator_t
<
V
>
modela
std::
sized_sentinel_for
<
ranges::
iterator_t
<
V
>>
, y modela
contiguous_range
,
random_access_range
,
bidirectional_range
, y
forward_range
cuando
V
modela los conceptos respectivos.
A diferencia de
lazy_split_view
,
split_view
mantiene la continuidad del subrango, haciéndolo adecuado para división de cadenas.
Contenidos |
Miembros de datos
| Miembro | Descripción |
V
base_
(privado)
|
la vista subyacente (adaptada)
view
( objeto miembro solo para exposición* ) |
Pattern
pattern_
(privado)
|
el objeto patrón que se utiliza como delimitador para dividir la
view
subyacente
( objeto miembro solo para exposición* ) |
non-propagating-cache
<
ranges::
subrange
<
ranges::
iterator_t
<
V
>>>
cached_begin_
(privado)
|
un objeto que almacena en caché el resultado de la primera llamada a
begin()
( objeto miembro solo para exposición* ) |
Funciones miembro
construye un
split_view
(función miembro pública) |
|
|
devuelve una copia de la vista subyacente (adaptada)
(función miembro pública) |
|
|
devuelve un iterador al inicio
(función miembro pública) |
|
|
devuelve un iterador o un centinela al final
(función miembro pública) |
|
|
busca la siguiente ocurrencia del patrón
( función miembro solo de exposición* ) |
|
Heredado de std::ranges::view_interface |
|
devuelve si la vista derivada está vacía, proporcionado solo si satisface
sized_range
o
forward_range
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
|
(C++23)
|
devuelve un iterador constante al inicio del rango
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
(C++23)
|
devuelve un centinela para el iterador constante del rango
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
devuelve si la vista derivada no está vacía, proporcionado solo si
ranges::empty
es aplicable a ella
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
devuelve el primer elemento en la vista derivada, proporcionado si satisface
forward_range
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
Clases anidadas
|
el tipo de iterador
( clase miembro solo para exposición* ) |
|
|
el tipo de centinela
( clase miembro solo para exposición* ) |
Guías de deducción
Notas
Antes de
P2210R2
,
split_view
utilizaba un mecanismo
lazy
para la división, y por lo tanto no podía mantener las propiedades bidireccionales, de acceso aleatorio o contiguas de la vista subyacente, ni hacer que el tipo de iterador del rango interno fuera igual al de la vista subyacente. En consecuencia, fue rediseñado por
P2210R2
, y el mecanismo lazy se trasladó a
lazy_split_view
.
El delimitador
pattern
generalmente no debería ser un literal de cadena ordinario, ya que considerará el terminador nulo como parte necesaria del delimitador; por lo tanto, es recomendable usar un literal
std::string_view
en su lugar.
Ejemplo
#include <iomanip> #include <iostream> #include <ranges> #include <string_view> int main() { using std::operator""sv; constexpr auto words{"Hello^_^C++^_^20^_^!"sv}; constexpr auto delim{"^_^"sv}; for (const auto word : std::views::split(words, delim)) // con el constructor de rango de string_view de C++23: std::cout << std::quoted(std::string_view(word)) << ' '; std::cout << '\n'; }
Salida:
"Hello" "C++" "20" "!"
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| P2210R2 | C++20 |
el antiguo
split_view
era demasiado perezoso para ser usado fácilmente
|
fue rediseñado |
Véase también
una
view
sobre los subrangos obtenidos al dividir otra
view
usando un delimitador
(plantilla de clase) (objeto adaptador de rango) |
|
|
(C++20)
|
una
view
que consiste en la secuencia obtenida al aplanar una
view
de
range
s
(plantilla de clase) (objeto adaptador de rango) |