std::ranges:: subrange
|
Definido en el encabezado
<ranges>
|
||
|
template
<
std::
input_or_output_iterator
I,
|
(1) | (desde C++20) |
|
Conceptos auxiliares
|
||
|
template
<
class
From,
class
To
>
concept
/*uses-nonqualification-pointer-conversion*/
=
|
(2) | ( solo exposición* ) |
|
template
<
class
From,
class
To
>
concept /*convertible-to-non-slicing*/ = /* ver descripción */ ; |
(3) | ( solo exposición* ) |
subrange
combina un iterador y un centinela en una única
view
. Modela
sized_range
siempre que el parámetro de plantilla final sea
subrange_kind
::
sized
(lo cual ocurre cuando se satisface
std::
sized_sentinel_for
<
S, I
>
o cuando el tamaño se pasa explícitamente como argumento del constructor).
From
es convertible a
To
sin
conversiones de calificación
. Equivalente a:
template<class From, class To> concept /*uses-nonqualification-pointer-conversion*/ = std::is_pointer_v<From> && std::is_pointer_v<To> && !std::convertible_to<std::remove_pointer_t<From>(*)[], std::remove_pointer_t<To>(*)[]>;
From
es convertible a
To
sin conversión de derivado-a-base:
template<class From, class To> concept /*convertible-to-non-slicing*/ = std::convertible_to<From, To> && !/*uses-nonqualification-pointer-conversion*/ <std::decay_t<From>, std::decay_t<To>>;
Contenidos |
Miembros de datos
| Miembro | Definición |
constexpr
bool
StoreSize
[static]
|
K
==
ranges
::
subrange_kind
::
sized
&&
!
std::
sized_sentinel_for
<
S, I
>
( constante miembro estática solo para exposición* ) |
I
begin_
|
un iterador al inicio del subrango
( objeto miembro solo para exposición* ) |
S
end_
|
un centinela que denota el final del subrango
( objeto miembro solo para exposición* ) |
make-unsigned-like-t
<
std::
iter_difference_t
<
I
>>
size_
(presente solo si
StoreSize
es
true
)
|
el tamaño del subrango
( objeto miembro solo para exposición* ) |
Funciones miembro
crea un nuevo
subrange
(función miembro pública) |
|
convierte el
subrange
a un tipo
pair-like
(función miembro pública) |
|
Observadores |
|
|
obtiene el iterador
(función miembro pública) |
|
|
obtiene el centinela
(función miembro pública) |
|
verifica si el
subrange
está vacío
(función miembro pública) |
|
obtiene el tamaño del
subrange
(función miembro pública) |
|
Operaciones de iterador |
|
|
avanza el iterador una distancia dada
(función miembro pública) |
|
obtiene una copia del
subrange
con su iterador decrementado una distancia dada
(función miembro pública) |
|
obtiene una copia del
subrange
con su iterador avanzado una distancia dada
(función miembro pública) |
|
Heredado de std::ranges::view_interface |
|
|
(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>
)
|
|
obtiene la dirección de los datos de la vista derivada, proporcionado solo si su tipo de iterador satisface
contiguous_iterator
(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>
)
|
|
devuelve el último elemento en la vista derivada, proporcionado solo si satisface
bidirectional_range
y
common_range
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
devuelve el elemento
n
ésimo
en la vista derivada, proporcionado solo si satisface
random_access_range
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
Guías de deducción
Funciones no miembro
|
(C++20)
|
obtiene un iterador o centinela de un
std::ranges::subrange
(plantilla de función) |
Tipos auxiliares
|
(C++20)
|
especifica si un
std::ranges::subrange
modela
std::ranges::sized_range
(enumeración) |
|
obtiene el tamaño de un
std::ranges::subrange
(especialización de plantilla de clase) |
|
|
obtiene el tipo del iterador o del centinela de un
std::ranges::subrange
(especialización de plantilla de clase) |
Plantillas auxiliares
|
template
<
class
I,
class
S,
ranges::
subrange_kind
K
>
constexpr bool ranges:: enable_borrowed_range < ranges :: subrange < I, S, K >> = true ; |
(desde C++20) | |
Esta especialización de
ranges::
enable_borrowed_range
hace que
subrange
cumpla con
borrowed_range
.
Ejemplo
#include <map> #include <print> #include <ranges> void make_uppercase(char& v) { v += 'A' - 'a'; } void uppercase_transform(std::multimap<int, char>& m, int k) { auto [first, last] = m.equal_range(k); for (auto& [_, v] : std::ranges::subrange(first, last)) make_uppercase(v); } int main() { std::multimap<int, char> mm{{4, 'a'}, {3, '-'}, {4, 'b'}, {5, '-'}, {4, 'c'}}; std::println("Before: {}", mm); uppercase_transform(mm, 4); std::println("After: {}", mm); }
Salida:
Before: {3: '-', 4: 'a', 4: 'b', 4: 'c', 5: '-'}
After: {3: '-', 4: 'A', 4: 'B', 4: 'C', 5: '-'}
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 |
|---|---|---|---|
| LWG 3470 | C++20 |
convertible-to-non-slicing
podría rechazar conversiones de calificación
|
siempre las acepta |
Véase también
|
(C++20)
|
clase de plantilla auxiliar para definir una
view
, utilizando el
patrón de plantilla curioso y recurrente
(clase de plantilla) |
Enlaces externos
Leer/escribir todos los valores de un
std::multimap
con una clave dada en C++20
— SO
|