std:: mdspan
|
Definiert im Header
<mdspan>
|
||
|
template
<
class
T,
|
(seit C++23) | |
std::mdspan
ist eine multidimensionale Array-Ansicht, die einen multidimensionalen Index auf ein Element des Arrays abbildet. Die Abbildungs- und Elementzugriffsrichtlinien sind konfigurierbar, und das zugrundeliegende Array muss nicht zusammenhängend oder überhaupt im Speicher vorhanden sein.
Jede Spezialisierung
MDS
von
mdspan
modelliert
copyable
und erfüllt:
-
- std:: is_nothrow_move_constructible_v < MDS > ist true ,
- std:: is_nothrow_move_assignable_v < MDS > ist true , und
- std:: is_nothrow_swappable_v < MDS > ist true .
Eine Spezialisierung von
mdspan
ist ein
TriviallyCopyable
-Typ, wenn ihr
accessor_type
,
mapping_type
und
data_handle_type
TriviallyCopyable
-Typen sind.
Inhaltsverzeichnis |
Template-Parameter
| T | - | Elementtyp; ein vollständiger Objekttyp, der weder ein abstrakter Klassentyp noch ein Array-Typ ist. |
| Extents | - | gibt die Anzahl der Dimensionen, ihre Größen und welche zur Kompilierzeit bekannt sind an. Muss eine Spezialisierung von std::extents sein. |
| LayoutPolicy | - | gibt an, wie ein mehrdimensionaler Index in einen zugrundeliegenden 1D-Index umgewandelt wird (spaltenmajor 3D-Array, symmetrische dreieckige 2D-Matrix, etc.). Muss die Anforderungen von LayoutMappingPolicy erfüllen. |
| AccessorPolicy | - | gibt an, wie ein zugrundeliegender 1D-Index in eine Referenz auf T umgewandelt wird. Muss die Bedingung erfüllen, dass std:: is_same_v < T, typename AccessorPolicy :: element_type > gleich true ist. Muss die Anforderungen von AccessorPolicy erfüllen. |
Mitgliedertypen
| Mitglied | Definition |
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 |
Datenmitglieder
| Mitglied | Beschreibung |
accessor_type
acc_
(privat)
|
der Accessor
( Nur zur Darstellung verwendetes Mitgliedsobjekt* ) |
mapping_type
map_
(privat)
|
das Layout-Mapping
( Nur zur Darstellung verwendetes Mitgliedsobjekt* ) |
data_handle_type
ptr_
(privat)
|
der zugrundeliegende Daten-Handle
( Nur zur Darstellung verwendetes Mitgliedsobjekt* ) |
Memberfunktionen
konstruiert einen
mdspan
(öffentliche Elementfunktion) |
|
weist einen
mdspan
zu
(öffentliche Elementfunktion) |
|
Elementzugriff |
|
|
greift auf ein Element am angegebenen mehrdimensionalen Index zu
(öffentliche Elementfunktion) |
|
Beobachter |
|
|
[static]
|
gibt den Rang eines
mdspan
zurück
(öffentliche statische Elementfunktion) |
|
[static]
|
gibt den dynamischen Rang eines
mdspan
zurück
(öffentliche statische Elementfunktion) |
|
[static]
|
gibt die statische Extent-Größe eines
mdspan
an einem gegebenen Rangindex zurück
(öffentliche statische Elementfunktion) |
gibt den Extent eines
mdspan
an einem gegebenen Rangindex zurück
(öffentliche Elementfunktion) |
|
|
gibt die Größe des mehrdimensionalen Indexraums zurück
(öffentliche Elementfunktion) |
|
|
prüft, ob die Größe des Indexraums null ist
(öffentliche Elementfunktion) |
|
|
ermittelt die Schrittweite entlang der angegebenen Dimension
(öffentliche Elementfunktion) |
|
|
ermittelt das Extents-Objekt
(öffentliche Elementfunktion) |
|
|
ermittelt den Zeiger auf die zugrundeliegende 1D-Sequenz
(öffentliche Elementfunktion) |
|
|
ermittelt das Mapping-Objekt
(öffentliche Elementfunktion) |
|
|
ermittelt das Accessor-Policy-Objekt
(öffentliche Elementfunktion) |
|
|
bestimmt, ob das Mapping dieses mdspan eindeutig ist (jede Kombination von Indizes bildet auf ein anderes zugrundeliegendes Element ab)
(öffentliche Elementfunktion) |
|
|
bestimmt, ob das Mapping dieses mdspan erschöpfend ist (jedes zugrundeliegende Element kann mit einer Kombination von Indizes erreicht werden)
(öffentliche Elementfunktion) |
|
|
bestimmt, ob das Mapping dieses mdspan schrittweise ist (in jeder Dimension überspringt das Inkrementieren eines Index jedes Mal die gleiche Anzahl zugrundeliegender Elemente)
(öffentliche Elementfunktion) |
|
|
[static]
|
bestimmt, ob das Layout-Mapping dieses mdspan immer eindeutig ist
(öffentliche statische Elementfunktion) |
|
[static]
|
bestimmt, ob das Layout-Mapping dieses mdspan immer erschöpfend ist
(öffentliche statische Elementfunktion) |
|
[static]
|
bestimmt, ob das Layout-Mapping dieses mdspan immer schrittweise ist
(öffentliche statische Elementfunktion) |
Nicht-Member-Funktionen
|
(C++23)
|
spezialisiert den
std::swap
Algorithmus für mdspan
(Funktions-Template) |
Subviews |
|
|
(C++26)
|
gibt eine Ansicht eines Teils eines bestehenden
mdspan
zurück
(Funktions-Template) |
|
(C++26)
|
erstellt neue Extents aus bestehenden Extents und Slice-Spezifizierern
(Funktions-Template) |
Hilfstypen und Templates
|
(C++23)
|
ein Deskriptor eines mehrdimensionalen Indexraums eines bestimmten Rangs
(Klassentemplate) |
|
(C++23)
(C++26)
|
praktisches Alias-Template für einen vollständig dynamischen
std::extents
(Alias-Template) |
|
(C++23)
|
ein Typ für indizierten Zugriff auf Elemente von
mdspan
(Klassentemplate) |
|
(C++26)
|
ein Typ für ausgerichteten Zugriff auf Elemente von
mdspan
(Klassentemplate) |
Layout-Mapping-Strategien |
|
|
(C++23)
|
spaltenorientierte mehrdimensionale Array-Layout-Mapping-Strategie; linkste Dimension hat Stride
1
(Klasse) |
|
(C++23)
|
zeilenorientierte mehrdimensionale Array-Layout-Mapping-Strategie; rechteste Dimension hat Stride
1
(Klasse) |
|
(C++23)
|
eine Layout-Mapping-Strategie mit benutzerdefinierten Strides
(Klasse) |
|
(C++26)
|
spaltenorientierte Layout-Mapping-Strategie mit Padding-Stride, der größer oder gleich der linksten Dimension sein kann
(Klassentemplate) |
|
(C++26)
|
zeilenorientierte Layout-Mapping-Strategie mit Padding-Stride, der größer oder gleich der rechtesten Dimension sein kann
(Klassentemplate) |
Subview-Hilfsmittel |
|
|
(C++26)
|
ein Slice-Spezifizierer-Tag, das den vollständigen Indexbereich in der angegebenen Dimension beschreibt.
(Tag) |
|
(C++26)
|
ein Slice-Spezifizierer, der eine Menge regelmäßig beabstandeter Indizes repräsentiert, angegeben durch einen Offset, eine Dimension und einen Stride
(Klassentemplate) |
|
(C++26)
|
ein Rückgabetyp der Überladungen von
submdspan_mapping
(Klassentemplate) |
Deduktionshilfen
Hinweise
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_mdspan
|
202207L
|
(C++23) |
std::mdspan
|
__cpp_lib_submdspan
|
202306L
|
(C++26) | std::submdspan |
202403L
|
(C++26) |
std::mdspan
gepolsterte Layouts
|
|
__cpp_lib_aligned_accessor
|
202411L
|
(C++26) | std::aligned_accessor |
Beispiel
Kann auf Compiler Explorer vorgezeigt werden.
#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}; // View data as contiguous memory representing 2 rows of 6 ints each auto ms2 = std::mdspan(v.data(), 2, 6); // View the same data as a 3D array 2 x 3 x 2 auto ms3 = std::mdspan(v.data(), 2, 3, 2); // Write data using 2D view 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; // Read back using 3D view for (std::size_t i = 0; i != ms3.extent(0); i++) { std::println("slice @ 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(""); } } }
Ausgabe:
slice @ i = 0 0 1 2 3 4 5 slice @ i = 1 1000 1001 1002 1003 1004 1005
Siehe auch
|
(C++20)
|
eine nicht-besitzende Ansicht über eine zusammenhängende Objektsequenz
(Klassentemplate) |
|
numerische Arrays, Arraymasken und Arrayslices
(Klassentemplate) |