std::ranges:: views:: drop, std::ranges:: drop_view
|
Definido en el encabezado
<ranges>
|
||
|
template
<
ranges::
view
V
>
class
drop_view
|
(1) | (desde C++20) |
|
namespace
views
{
inline
constexpr
/* no especificado */
drop
=
/* no especificado */
;
|
(2) | (desde C++20) |
|
Firma de llamada
|
||
|
template
<
ranges::
viewable_range
R
>
requires
/* ver más abajo */
|
(desde C++20) | |
|
template
<
class
DifferenceType
>
constexpr /* closure de adaptador de rango */ drop ( DifferenceType && count ) ; |
(desde C++20) | |
T
is
std::
remove_cvref_t
<
decltype
(
(
e
)
)
>
and
D
is
ranges::
range_difference_t
<
decltype
(
(
e
)
)
>
), the expression
vistas
::
drop
(
e, f
)
is
expression-equivalente
to:
-
(
(
void
)
f,
decay-copy ( e ) ) , siTes un ranges::empty_view , excepto que las evaluaciones de e y f están indeterminadamente secuenciadas; -
de lo contrario,
T
(
ranges::
begin
(
e
)
+
inc,
ranges::
end
(
e
)
,
/*to-unsigned-like*/ ( ranges:: distance ( e ) - inc ) ) , siTes una especialización de ranges:: subrange que modela tantorandom_access_rangecomosized_range, yTnecesita almacenar el tamaño (ver ranges::subrange::subrange() para detalles), donde inc es std:: min < D > ( ranges:: distance ( e ) , f ) ; -
de lo contrario,
U
(
ranges::
begin
(
e
)
+
inc,
ranges::
end
(
e
)
)
, si
Tes una especialización de std:: span , std::basic_string_view , ranges:: iota_view , o ranges:: subrange que modela tantorandom_access_rangecomosized_range, dondeUes
-
-
std::
span
<
typename
T
::
element_type
>
, si
Tes una especialización de std:: span ; -
Ten caso contrario;
-
std::
span
<
typename
T
::
element_type
>
, si
|
(desde C++23) |
- de lo contrario, drop_view ( e, f ) .
drop_view
modela los conceptos
contiguous_range
,
random_access_range
,
bidirectional_range
,
forward_range
,
input_range
,
common_range
, y
sized_range
cuando la vista subyacente
V
modela los respectivos conceptos.
Contenidos |
Miembros de datos
| Miembro | Descripción |
V
base_
(privado)
|
la vista subyacente
( objeto miembro solo para exposición* ) |
ranges::
range_difference_t
<
V
>
count_
(privado)
|
el número de elementos a omitir
( objeto miembro solo para exposición* ) |
non-propagating-cache
<
ranges::
iterator_t
<
V
>>
cache_
(privado)
(presente solo si
V
satisface
forward_range
pero no
random_access_range
y
sized_range
)
|
un objeto que almacena en caché el resultado de llamadas a
begin()
( objeto miembro solo para exposición* ) |
Funciones miembro
construye un
drop_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) |
|
devuelve el número de elementos, proporcionado solo si el rango subyacente (adaptado) satisface
sized_range
(función miembro pública) |
|
|
(C++26)
|
devuelve el tamaño aproximado del
approximately_sized_range
resultante
(función miembro pública) |
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>
)
|
|
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
Plantillas auxiliares
|
template
<
class
T
>
constexpr
bool
enable_borrowed_range
<
std
::
ranges
::
drop_view
<
T
>>
=
|
(desde C++20) | |
Esta especialización de
ranges::enable_borrowed_range
hace que
drop_view
satisfaga
borrowed_range
cuando la vista subyacente la satisface.
Ejemplo
#include <initializer_list> #include <iostream> #include <ranges> int main() { const auto nums = {1, 2, 3, 4, 5, 6, 7}; std::cout << "drop " << 2 << ": "; for (int i : std::ranges::drop_view{nums, 2}) std::cout << i << ' '; std::cout << '\n'; std::cout << "drop " << 3 << ": "; for (int i : nums | std::views::drop(3)) std::cout << i << ' '; std::cout << '\n'; std::cout << "drop " << 4 << ": "; for (int i : std::views::iota(1, 8) | std::views::drop(4)) std::cout << i << ' '; std::cout << '\n'; // Nota: eliminar más elementos de los disponibles es válido: for (int dp : {5, 6, 7, 890, 100500}) { std::cout << "drop " << dp << ": "; for (int i : std::views::iota(1, 8) | std::views::drop(dp)) std::cout << i << ' '; std::cout << '\n'; } }
Salida:
drop 2: 3 4 5 6 7 drop 3: 4 5 6 7 drop 4: 5 6 7 drop 5: 6 7 drop 6: 7 drop 7: drop 890: drop 100500:
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 3407 | C++20 |
views::drop
a veces falla al
construir un rango de acceso aleatorio con tamaño |
la construcción se ajusta
para que siempre sea válida |
| LWG 3494 | C++20 |
drop_view
nunca fue un
borrowed_range
|
es un
borrowed_range
si su vista subyacente lo es
|
Véase también
una
view
que consiste en los elementos de otra
view
, omitiendo la subsecuencia inicial de elementos hasta el primer elemento donde el predicado devuelve
false
(plantilla de clase) (objeto adaptador de rango) |