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 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>)
|
Guías de deducción
Plantillas auxiliares
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. |
