std::ranges::views::drop, std::ranges::drop_view
| Definido en el archivo de encabezado <ranges>
|
||
template< ranges::view V > class drop_view : public ranges::view_interface<drop_view<V>> |
(1) | (desde C++20) |
namespace views { inline constexpr /*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 */ constexpr ranges::view auto drop( R&& r, DifferenceType&& count ); |
(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)), siTes una vista ranges::empty_view, excepto que las evaluaciones deeyfson 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)), siTes una especialización deranges::subrangeque modela tanto arandom_access_rangecomosized_range, yTnecesita almacenar el tamaño (véase ranges::subrange::subrange para más detalles), dondeincesstd::min<D>(ranges::distance(e), f); - de lo contrario,
U(ranges::begin(e) + std::min<D>(ranges::distance(e), f), ranges::end(e)), siTes una especialización de std::span, std::basic_string_view, ranges::iota_view, o ranges::subrange que modela tanto arandom_access_rangecomosized_range, dondeUes
std::span<typename T::element_type>, siTes una especialización de std::span;Tde lo contrario;
- 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.
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.
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 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>)
|
Guías de deducción
Plantillas auxiliares
<tbody> </tbody> template<class T> inline constexpr bool enable_borrowed_range<std::ranges::drop_view<T>> = std::ranges::enable_borrowed_range<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.
Ejemplo
#include <ranges>
#include <iostream>
int main()
{
const auto 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
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. |
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) |