std::ranges::views::drop, std::ranges::drop_view
Definido en el archivo de encabezado <ranges> | ||
template<ranges::view V > class drop_view :publicranges::view_interface<drop_view<V>> | (1) | (desde C++20) |
namespace views { inlineconstexpr/*no especificado*/ drop =/*no especificado*/; | (2) | (desde C++20) |
Signatura de la llamada | ||
template<ranges::viewable_range R, class DifferenceType > requires /* véase a continuación */ | (desde C++20) | |
template<class DifferenceType > constexpr/*cierre de adaptador de rango*/ 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 en expresión a: - ((void)f, static_cast<T>(e)), si
T
es una vista ranges::empty_view, excepto que las evaluaciones de e y f son secuenciadas de manera indeterminada; - de lo contrario, T(ranges::begin(e)+ inc, ranges::end(e), /*a-similar-a-entero-sin-signo*/(ranges::distance(e)- inc)), si
T
es una especialización de ranges::subrange que modela tanto arandom_access_range
comosized_range
, yT
necesita almacenar el tamaño (véase ranges::subrange::subrange para más detalles), dondeinc
es std::min<D>(ranges::distance(e), f); - de lo contrario, U(ranges::begin(e)+std::min<D>(ranges::distance(e), f), ranges::end(e)), si
T
es una especialización de std::span, std::basic_string_view, ranges::iota_view, o ranges::subrange que modela tanto arandom_access_range
comosized_range
, dondeU
es
- std::span<typename T::element_type>, si
T
es una especialización de std::span; - T de lo contrario;
- std::span<typename T::element_type>, si
- 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 conceptos respectivos.
Contenido |
[editar]Equivalente en expresión
La expresión e es equivalente-en-expresión a la expresión f, si e y f tienen los mismos efectos, ambas potencialmente lanzan o ambas potencialmente no lanzan (es decir, noexcept(e)==noexcept(f)), y ambas son subexpresiones constantes o ambas no son subexpresiones constantes.
[editar]Funciones miembro
(C++20) | Construye un objeto drop_view (función miembro pública) |
(C++20) | Devuelve una copia de la vista (adaptada) subyacente. (función miembro pública) |
(C++20) | Devuelve un iterador al comienzo. (función miembro pública) |
(C++20) | Devuelve un iterador o un centinela al final. (función miembro pública) |
(C++20) | Devuelve el número de elementos. Se proporciona solo si el rango (adaptado) subyacente satisface sized_range . (función miembro pública) |
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> ) |
(C++20) | 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> ) |
(C++20) | Obtiene la dirección de los datos de una vista derivada. Se proporciona si su tipo iterador satisface contiguous_iterator . (función miembro pública de std::ranges::view_interface<D> ) |
(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> ) |
(C++20) | Devuelve el último elemento en una vista derivada. Se proporciona si la vista derivada satisface bidirectional_range y common_range . (función miembro pública de std::ranges::view_interface<D> ) |
(C++20) | Devuelve el enésimo elemento en la vista derivada. Se proporciona si la vista derivada satisface random_access_range . (función miembro pública de std::ranges::view_interface<D> ) |
[editar]Guías de deducción
[editar]Plantillas auxiliares
template<class T> inlineconstexprbool enable_borrowed_range<std::ranges::drop_view<T>>= | (desde C++20) | |
Esta especialización de std::ranges::enable_borrowed_range hace que drop_view
satisfaga borrowed_range
cuando la vista subyacente lo hace.
[editar]Ejemplo
#include <ranges>#include <iostream> int main(){constauto nums ={1, 2, 3, 4, 5, 6, 7, 8, 9}; for(int i : nums | std::views::drop(2))std::cout<< i <<' ';std::cout<<'\n'; for(int i : std::views::iota(1, 10)| std::views::drop(2))std::cout<< i <<' ';std::cout<<'\n'; for(int i : std::ranges::drop_view{nums, 2})std::cout<< i <<' ';std::cout<<'\n';}
Salida:
3 4 5 6 7 8 9 3 4 5 6 7 8 9 3 4 5 6 7 8 9
[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 |
---|---|---|---|
LWG 3494 | C++20 | drop_view nunca era un borrowed_range . | Es un borrowed_range si su vista subyacente lo es. |
LWG 3407 | C++20 | views::drop a veces fracasa al construirun rango de acceso aleatorio con tamaño. | La construcción se ajusta para que siempre sea válida. |
[editar]Véase también
Una vista (view ) que consiste en los elementos de otra vista, saltándose la subsecuencia inicial de elementos hasta el primer elemento donde el predicado devuelva falso. (plantilla de clase)(objeto adaptador de rango) |