std::mdspan - cppreference.com
De cppreference.com
| Definido en el archivo de encabezado |
||
|
|
(desde C++23) | |
std::mdspan es una vista de una secuencia contigua de objetos que la reinterpreta como un array multidimensional.
Cada especialización MDS de mdspan modela copyable y satisface:
std::is_nothrow_move_constructible_v<MDS>estrue,std::is_nothrow_move_assignable_v<MDS>estrue, ystd::is_nothrow_swappable_v<MDS>estrue.
Una especialización de mdspan es un tipo TrivialmenteCopiable si su accessor_type, mapping_type y data_handle_type son tipos TrivialmenteCopiable.
Parámetros de plantilla
| T | - | Tipo de elemento; un tipo objeto completo que no es ni un tipo clase abstracta ni un tipo array. |
| Extents | - | Especifica el número de dimensiones, sus tamaños y cuáles se conocen en el momento de la compilación. Debe ser una especialización de std::extents. |
| LayoutPolicy | - | Especifica cómo convertir un índice multidimensional a un índice 1D subyacente (array 3D de columna principal, array 2D triangular simétrica, etc.)). |
| AccessorPolicy | - | Especifica cómo convertir el índice 1D subyacente en una referencia a T. Debe satisfacer la restricción de que std::is_same_v<T, typename AccessorPolicy::element_type> es true.
|
Tipos miembro
| Tipo miembro | Definición |
extents_type
|
Extents
|
layout_type
|
LayoutPolicy
|
accessor_type
|
AccessorPolicy
|
mapping_type
|
LayoutPolicy::mapping<Extents>
|
element_type
|
T
|
value_type
|
std::remove_cv_t<T>
|
index_type
|
Extents::index_type
|
size_type
|
Extents::size_type
|
rank_type
|
Extents::rank_type
|
data_handle_type
|
AccessorPolicy::data_handle_type
|
reference
|
AccessorPolicy::reference
|
Datos miembro
| Nombre | Definición |
acc_ (private)
|
El descriptor de acceso. (objeto miembro solo de exposición*) |
map_ (private)
|
El mapeo de diseño. (objeto miembro solo de exposición*) |
ptr_ (private)
|
El identificador de datos subyacente. (objeto miembro solo de exposición*) |
Funciones miembro
Construye un objeto de tipo mdspan. (función miembro pública) [editar] | |
Asigna un objeto de tipo mdspan. (función miembro pública) [editar] | |
Acceso a elementos | |
| Accede a un elemento en el índice multidimensional especificado. (función miembro pública) [editar] | |
Observadores | |
[estático] |
Devuelve el rango de un mdspan. (función miembro estática pública) [editar] |
[estático] |
Devuelve el rango dinámico de un mdspan. (función miembro estática pública) [editar] |
[estático] |
Devuelve el tamaño de extensión estático de un mdspan en un índice de rango dado. (función miembro estática pública) [editar] |
Devuelve la extensión de un mdspan en un índice de rango dado. (función miembro pública) [editar] | |
| Devuelve el tamaño del espacio del índice multidimensional. (función miembro pública) [editar] | |
| Comprueba si el tamaño del espacio de índice es cero. (función miembro pública) [editar] | |
| Obtiene el avance a lo largo de la dimensión especificada. (función miembro pública) [editar] | |
| Obtiene el objeto de tipo std::extents. (función miembro pública) [editar] | |
| Obtiene el puntero a la secuencia 1D subyacente. (función miembro pública) [editar] | |
| Obtiene el objeto de mapeo. (función miembro pública) [editar] | |
| Obtiene el objeto de política del accessor. (función miembro pública) [editar] | |
| Determina si el mapeo de este mdspan es único (cada combinación de índices se asigna a un elemento subyacente diferente). (función miembro pública) [editar] | |
| Determina si el mapeo de este mdspan es exhaustivo (se puede acceder a cada elemento subyacente con alguna combinación de índices). (función miembro pública) [editar] | |
| Determina si se avanza el mapeo de este mdspan (en cada dimensión, al incrementar un índice se salta el mismo número de elementos subyacentes cada vez). (función miembro pública) [editar] | |
[estático] |
Determina si el mapeo de diseño de este mdspan es siempre único. (función miembro estática pública) [editar] |
[estático] |
Determina si el mapeo de diseño de este mdspan es siempre exhaustivo. (función miembro estática pública) [editar] |
[estático] |
Determina si el mapeo de diseño de este mdspan siempre se avanza. (función miembro estática pública) [editar] |
Funciones no miembro
| Especializa el algoritmo std::swap para mdspan. (plantilla de función) [editar] | |
Subvistas | |
Devuelve una vista de un subconjunto de un mdspan existente. (plantilla de función) [editar] | |
| Crea nuevas extensiones a partir de las extensiones existentes y los especificadores de sección. (plantilla de función) [editar] | |
Tipos auxiliares y plantillas
(C++23) |
Un descriptor de un espacio de índice multidimensional de algún rango. (plantilla de clase) [editar] |
(C++23) |
Plantilla de alias conveniente para un std::extents totalmente dinámico. (plantilla de alias) [editar] |
(C++23) |
Un tipo para acceso indexado a elementos de mdspan. (plantilla de clase) [editar] |
(C++26) |
Un tipo para el acceso alineado a los elementos de mdspan. (plantilla de clase) [editar] |
Políticas de mapeo de diseño | |
(C++23) |
Política de mapeo de diseño de array multidimensional de columnas principales; la extensión más a la izquierda tiene avance 1. (clase) [editar] |
(C++23) |
Política de mapeo de diseño de array multidimensional de fila principal; la extensión más a la derecha tiene avance 1. (clase) [editar] |
(C++23) |
Una política de mapeo de diseño con avances definidos por el usuario. (clase) [editar] |
(C++26) |
Política de mapeo de diseño de columna principal con paso de relleno que puede ser mayor o igual que la extensión más a la izquierda. (plantilla de clase) [editar] |
(C++26) |
Política de mapeo de diseño de fila principal con paso de relleno que puede ser mayor o igual que la extensión más a la derecha. (plantilla de clase) [editar] |
Auxiliares de subvistas | |
(C++26) |
Una etiqueta especificadora de sectores que describe el rango completo de índices en la extensión especificada. (tag)[editar] |
(C++26) |
Un especificador de sección que representa un conjunto de índices espaciados regularmente como lo indica un desplazamiento, una extensión y un avance. (plantilla de clase) [editar] |
(C++26) |
Un tipo de retorno de las sobrecargas de submdspan_mapping. (plantilla de clase) [editar] |
Guías de deducción
Notas
| Macro de prueba de característica | |||
|---|---|---|---|
__cpp_lib_mdspan |
202207L |
(C++23) | std::mdspan
|
__cpp_lib_submdspan |
202306L |
(C++26) | std::submdspan |
202403L |
(C++26) | std::mdspan padded layouts
| |
__cpp_lib_aligned_accessor |
202411L |
(C++26) | std::aligned_accessor |
Ejemplo
Se puede obtener una vista previa en Compiler Explorer.
#include <cstddef> #include <mdspan> #include <print> #include <vector> int main() { std::vector v{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; // Ver datos como memoria contigua que representa 2 filas de 6 entradas cada una auto ms2 = std::mdspan(v.data(), 2, 6); // Ver los mismos datos como un array 3D 2 x 3 x 2 auto ms3 = std::mdspan(v.data(), 2, 3, 2); // Escribir datos usando la vista 2D for (std::size_t i = 0; i != ms2.extent(0); i++) for (std::size_t j = 0; j != ms2.extent(1); j++) ms2[i, j] = i * 1000 + j; // Volver a leer usando la vista 3D for (std::size_t i = 0; i != ms3.extent(0); i++) { std::println("sección @ i = {}", i); for (std::size_t j = 0; j != ms3.extent(1); j++) { for (std::size_t k = 0; k != ms3.extent(2); k++) std::print("{} ", ms3[i, j, k]); std::println(""); } } }
Salida:
sección @ i = 0 0 1 2 3 4 5 sección @ i = 1 1000 1001 1002 1003 1004 1005
Véase también
| Una vista que no es dueña sobre una secuencia contigua de objetos. (plantilla de clase) [editar] | |
| arrays numéricos, máscaras de arrays y secciones de array. (plantilla de clase) [editar] |