std::ranges::views::drop, std::ranges::drop_view
| Definida en el encabezado <ranges>
|
||
template< ranges::view V >
class drop_view
: public ranges::view_interface<drop_view<V>>
|
(1) | (desde C++20) |
namespace views {
inline constexpr /* unspecified */ drop = /* unspecified */;
}
|
(2) | (desde C++20) |
| Firma de llamada |
||
template< ranges::viewable_range R >
requires /* see below */
constexpr ranges::view auto
drop( R&& r, ranges::range_difference_t<R> count );
|
(desde C++20) | |
template< class DifferenceType >
constexpr /* range adaptor closure */ drop( DifferenceType&& count );
|
(desde C++20) | |
T es std::remove_cvref_t<decltype((e))> y D es ranges::range_difference_t<decltype((e))>), la expresión views::drop(e, f) es equivalente a expresión a:
((void)f,decay-copy(e)), siTes un ranges::empty_view, excepto que las evaluaciones deeyfestán secuenciadas indeterminadamente;- de lo contrario,
T(ranges::begin(e) + inc, ranges::end(e),/*to-unsigned-like*/(ranges::distance(e) - inc)), siTes una especialización deranges::subrangeque modela tanto random_access_range como sized_range, yTnecesita almacenar el tamaño (consulte ranges::subrange::subrange() para más detalles), dondeincesstd::min<D>(ranges::distance(e), f); - de lo contrario,
U(ranges::begin(e) + inc, ranges::end(e)), siTes una especialización destd::span, std::basic_string_view,ranges::iota_view, oranges::subrangeque modela tanto random_access_range como sized_range, dondeUes
std::span<typename T::element_type>, siTes una especialización destd::span;Tde lo contrario;
|
(desde C++23) |
- de lo contrario,
drop_view(e, f).
decltype((f)) debe modelar std::convertible_to<D>.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 conceptos respectivos.
Miembros de datos
| Miembro | Descripción |
V base_ (privado)
|
la vista subyacente (objeto miembro de solo exposición*) |
ranges::range_difference_t<V> count_ (privado)
|
el número de elementos a saltar (objeto miembro de solo exposición*) |
caché no propagante<ranges::iterator_t<V>> cache_ (privado) (presente solo si V satisface forward_rangepero no random_access_range y sized_range) |
un objeto que almacena en caché el resultado de las llamadas a begin()(objeto miembro de solo 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 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 nésimo elemento 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) |