std::ranges::views::take, std::ranges::take_view - cppreference.com
De cppreference.com
| Definido en el archivo de encabezado |
||
|
|
(1) | (desde C++20) |
|
|
(2) | (desde C++20) |
| Signatura de la llamada |
||
|
|
(desde C++20) | |
|
|
(desde C++20) | |
1) Un adaptador de rango que representa una vista (view) de los elementos de una secuencia subyacente, iniciando en el comienzo y terminando en un límite dado.
2) views::take es un objeto adaptador de rango. La expresión views::take(e, f) resulta en una vista que representa los primeros f elementos de e. El resultado no es necesariamente un objeto take_view.
Es equivalente en expresión a (donde T es std::remove_cvref_t<decltype((e))> y D es ranges::range_difference_t<decltype((e))>):
((void)f, static_cast<T>(e)), siTes una vista ranges::empty_view, excepto que las evaluaciones deeyfestán secuenciadas de manera indeterminada;U(ranges::begin(e), ranges::begin(e) + std::min<D>(ranges::distance(e), f)), siTes una especialización de std::span, std::basic_string_view, o ranges::subrange que modela tantorandom_access_rangecomosized_range, dondeUes
std::span<typename T::element_type>, siTes una especialización de std::span;T, siTes una especialización de std::basic_string_view;ranges::subrange<ranges::iterator_t<T>>, siTes una especialización de ranges::subrange;
ranges::iota_view(*ranges::begin(e), *(ranges::begin(e) + std::min<D>(ranges::distance(e), f))), siTes una especialización de ranges::iota_view que modela tantorandom_access_rangecomosized_range;- de lo contrario,
take_view(e, f).
En todos los casos, decltype((f)) debe modelar std::convertible_to<D>.
take_view modela los conceptos contiguous_range, random_access_range, bidirectional_range, forward_range, input_range, y sized_range cuando la vista subyacente V modela los conceptos respectivos. Modela common_range cuando la vista subyacente V modela tanto random_access_range como sized_range.
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 take_view (función miembro pública) [editar] |
(C++20) |
Devuelve una copia de la vista (adaptada) subyacente. (función miembro pública) [editar] |
(C++20) |
Devuelve un iterador al comienzo. (función miembro pública) [editar] |
(C++20) |
Devuelve un iterador o un centinela al final. (función miembro pública) [editar] |
(C++20) |
Devuelve el número de elementos. Se proporciona solo si el rango (adaptado) subyacente satisface sized_range . (función miembro pública) [editar] |
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>) [editar]
|
(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>) [editar]
|
(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>) [editar]
|
(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>) [editar]
|
(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>) [editar]
|
(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
Clases anidadas
| El tipo centinela. (plantilla de clase miembro de solo exposición) |
Plantillas auxiliares
|
|
(desde C++20) | |
Esta especialización de std::ranges::enable_borrowed_range hace que take_view satisfaga borrowed_range cuando la vista subyacente lo satisface.
Ejemplo
#include <algorithm> #include <iostream> #include <ranges> auto imprimir = [](char x) { std::cout << x; }; int main() { constexpr char pi[] { '3', '.', '1', '4', '1', '5', '9', '2' }; std::ranges::for_each(pi | std::ranges::views::take(6), imprimir); std::cout << '\n'; std::ranges::for_each(std::ranges::take_view{pi, 42}, imprimir); // toma solo 8 chars std::cout << '\n'; // de manera segura }
Salida:
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 | take_view nunca era un borrowed_range
|
Es un borrowed_range si su vista subyacente lo es.
|
| LWG 3407 | C++20 | views::take a veces fracasaba al construirun rango de acceso aleatorio con tamaño. |
Se ajustó el tipo resultado para que la construcción siempre sea válida. |