std::ranges:: views:: elements, std::ranges:: elements_view
|
Definido en el encabezado
<ranges>
|
||
|
template
<
ranges::
input_range
V,
std::
size_t
N
>
requires
ranges::
view
<
V
>
&&
|
(1) | (desde C++20) |
|
namespace
views
{
template
<
std::
size_t
N
>
|
(2) | (desde C++20) |
|
Firma de llamada
|
||
|
template
<
ranges::
viewable_range
R
>
requires
/* ver más abajo */
|
(desde C++20) | |
|
Conceptos auxiliares
|
||
| (3) | ||
|
template
<
class
T,
std::
size_t
N
>
concept
/*has-tuple-element*/
=
|
(hasta C++23)
( solo para exposición* ) |
|
|
template
<
class
T,
std::
size_t
N
>
concept
/*has-tuple-element*/
=
|
(desde C++23)
( solo para exposición* ) |
|
|
template
<
class
T,
std::
size_t
N
>
concepto returnable
-
element
=
|
(4) | ( solo para exposición* ) |
view
de valores tipo tupla, y produce una vista con un tipo de valor correspondiente al
N
-ésimo
elemento del tipo de valor de la vista adaptada.
views::elements
es un
RangeAdaptorObject
. La expresión
views
::
elements
<
M
>
(
e
)
es
equivalente-expresión
a
elements_view
<
views::
all_t
<
decltype
(
(
e
)
)
>
, M
>
{
e
}
para cualquier subexpresión adecuada
e
y expresión constante
M
.
elements_view
modela los conceptos
random_access_range
,
bidirectional_range
,
forward_range
,
input_range
,
common_range
, y
sized_range
cuando la vista subyacente
V
modela los respectivos conceptos.
Contenidos |
Miembros de datos
| Miembro | Descripción |
V
base_
|
la vista subyacente
( objeto miembro solo para exposición* ) |
Funciones miembro
construye un
elements_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>
)
|
|
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
n
ésimo
elemento en la vista derivada, proporcionado solo si satisface
random_access_range
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
Clases anidadas
|
el tipo de iterador
( clase de plantilla miembro solo para exposición* ) |
|
|
el tipo de centinela
( clase de plantilla miembro solo para exposición* ) |
Plantillas auxiliares
|
template
<
class
T,
std::
size_t
N
>
constexpr
bool
enable_borrowed_range
<
std
::
ranges
::
elements_view
<
T, N
>>
=
|
(desde C++20) | |
Esta especialización de
ranges::enable_borrowed_range
hace que
elements_view
satisfaga
borrowed_range
cuando la vista subyacente lo satisface.
Ejemplo
#include <iostream> #include <ranges> #include <string> #include <tuple> #include <vector> int main() { const std::vector<std::tuple<int, char, std::string>> vt { {1, 'A', "α"}, {2, 'B', "β"}, {3, 'C', "γ"}, {4, 'D', "δ"}, {5, 'E', "ε"}, }; for (int const e : std::views::elements<0>(vt)) std::cout << e << ' '; std::cout << '\n'; for (char const e : vt | std::views::elements<1>) std::cout << e << ' '; std::cout << '\n'; for (std::string const& e : std::views::elements<2>(vt)) std::cout << e << ' '; std::cout << '\n'; }
Salida:
1 2 3 4 5 A B C D E α β γ δ ε
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Se aplica a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3494 | C++20 |
elements_view
nunca fue un
borrowed_range
|
es un
borrowed_range
si su vista subyacente lo es |
| LWG 3502 | C++20 |
se podía obtener una referencia colgante de
elements_view
|
se prohíbe dicho uso |
Véase también
|
(C++20)
|
toma una
view
que consiste en valores tipo par y produce una
view
de los primeros elementos de cada par
(plantilla de clase) (objeto adaptador de rango) |
toma una
view
que consiste en valores tipo par y produce una
view
de los segundos elementos de cada par
(plantilla de clase) (objeto adaptador de rango) |
|
|
(C++23)
|
una
view
que consiste en tuplas de referencias a elementos correspondientes de las vistas adaptadas
(plantilla de clase) (objeto punto de personalización) |
una
view
que consiste en resultados de la aplicación de una función de transformación a elementos correspondientes de las vistas adaptadas
(plantilla de clase) (objeto punto de personalización) |
|
|
segmento tipo BLAS de un valarray: índice inicial, longitud, paso
(clase) |