std::ranges:: views:: take, std::ranges:: take_view
|
Definido en el encabezado
<ranges>
|
||
|
template
<
ranges::
view
V
>
class
take_view
|
(1) | (desde C++20) |
|
namespace
views
{
inline
constexpr
/* no especificado */
take
=
/* no especificado */
;
|
(2) | (desde C++20) |
|
Firma de llamada
|
||
|
template
<
ranges::
viewable_range
R
>
requires
/* ver más abajo */
|
(desde C++20) | |
|
template
<
class
DifferenceType
>
constexpr /* adaptador de rango de cierre */ take ( DifferenceType && count ) ; |
(desde C++20) | |
view
de los elementos de una secuencia subyacente, comenzando desde el principio y terminando en un límite dado.
views::take
is a
RangeAdaptorObject
. The expression
vistas
::
take
(
e, f
)
results in a view that represents the first
f
elements from
e
. The result is not necessarily a
take_view
.
views
::
take
(
e, f
)
es
expression-equivalente
a (donde
T
es
std::
remove_cvref_t
<
decltype
(
(
e
)
)
>
y
D
es
ranges::
range_difference_t
<
decltype
(
(
e
)
)
>
):
-
(
(
void
)
f,
decay-copy ( e ) ) , siTes un ranges:: empty_view , excepto que las evaluaciones de e y f están indeterminadamente secuenciadas; -
U
(
ranges::
begin
(
e
)
,
ranges::
begin
(
e
)
+
std::
min
<
D
>
(
ranges::
distance
(
e
)
, f
)
)
, si
Tes 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
>
, si
Tes una especialización de std:: span ; -
T, siTes una especialización de std::basic_string_view ; -
ranges::
subrange
<
ranges::
iterator_t
<
T
>>
, si
Tes una especialización de ranges:: subrange ;
-
std::
span
<
typename
T
::
element_type
>
, si
-
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;
|
(desde C++23) |
- de lo contrario, take_view ( e, f ) .
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 respectivos conceptos. Modela
common_range
cuando la vista subyacente
V
modela tanto
random_access_range
como
sized_range
.
Contenidos |
Miembros de datos
| Miembro | Descripción |
V
base_
|
la vista subyacente
( objeto miembro solo para exposición* ) |
ranges::
range_difference_t
<
V
>
count_
|
el número de elementos a tomar
( objeto miembro solo para exposición* ) |
Funciones miembro
construye un
take_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 std::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 elemento
n
ésimo
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
Clases anidadas
|
(C++20)
|
el tipo centinela
( clase plantilla miembro solo para exposición* ) |
Plantillas auxiliares
|
template
<
class
T
>
constexpr
bool
enable_borrowed_range
<
std
::
ranges
::
take_view
<
T
>>
=
|
(desde C++20) | |
Esta especialización de
ranges::enable_borrowed_range
hace que
take_view
satisfaga
borrowed_range
cuando la vista subyacente lo satisface.
Ejemplo
#include <algorithm> #include <iostream> #include <ranges> int main() { namespace views = std::views; auto print = [](char x){ std::cout << x; }; for (const char nums[]{'1', '2', '3'}; int n : views::iota(0, 5)) { std::cout << "take(" << n << "): "; // safely takes only upto min(n, nums.size()) elements: std::ranges::for_each(nums | views::take(n), print); std::cout << '\n'; } }
Salida:
take(0): take(1): 1 take(2): 12 take(3): 123 take(4): 123
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::take
ocasionalmente fallaba al
construir un rango de acceso aleatorio dimensionado |
el tipo de resultado se ajusta para que
la construcción sea siempre válida |
| LWG 3494 | C++20 |
take_view
nunca era un
borrowed_range
|
es un
borrowed_range
si su vista subyacente lo es
|
Véase también
|
(C++20)
|
crea un subrango a partir de un iterador y un conteo
(objeto de punto de personalización) |
una
view
que consiste en los elementos iniciales de otra
view
, hasta el primer elemento en el cual un predicado devuelve
false
(plantilla de clase) (objeto adaptador de rango) |
|
|
(C++20)
|
copia un número de elementos a una nueva ubicación
(objeto función algoritmo) |