Namensräume
Varianten
Aktionen

std::mdspan

Von cppreference.com
< cpp‎ | container
 
 
 
 
Definiert in Header <mdspan>
template<

    class T,
    class Extents,
    class LayoutPolicy = std::layout_right,
    class AccessorPolicy = std::default_accessor<T>

> class mdspan;
(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 zugrunde liegende Array muss nicht zusammenhängend sein oder überhaupt im Speicher existieren.

Jede Spezialisierung MDS von mdspan modelliert copyable und erfüllt

Eine Spezialisierung von mdspan ist ein TriviallyCopyable-Typ, wenn seine accessor_type, mapping_type und data_handle_type TriviallyCopyable-Typen sind.

Inhalt

[edit] 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 multidimensionaler Index in einen eindimensionalen Basisindex umgewandelt wird (spaltenmajorisierte 3D-Array, symmetrische dreieckige 2D-Matrix usw.). Muss die Anforderungen von LayoutMappingPolicy erfüllen.
AccessorPolicy - gibt an, wie ein eindimensionaler Basisindex in eine Referenz auf T umgewandelt wird. Muss die Einschränkung erfüllen, dass std::is_same_v<T, typename AccessorPolicy​::​element_type> true ist. Muss die Anforderungen von AccessorPolicy erfüllen.

[edit] Member Types

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
Referenz AccessorPolicy::reference

[edit] Datenmember

Mitglied Beschreibung
accessor_type acc_ (private) der Accessor
((exposition-only member object*)
mapping_type map_ (private) das Layout-Mapping
((exposition-only member object*)
data_handle_type ptr_ (private) das zugrunde liegende Daten-Handle
((exposition-only member object*)

[edit] Member-Funktionen

konstruiert ein mdspan
(public member function) [edit]
weist ein mdspan zu
(public member function) [edit]
Elementzugriff
greift auf ein Element am angegebenen multidimensionalen Index zu
(public member function) [edit]
Observer
[static]
gibt den Rang eines mdspan zurück
(public static member function) [edit]
gibt den dynamischen Rang eines mdspan zurück
(public static member function) [edit]
gibt die statische Extentgröße eines mdspan am gegebenen Rangindex zurück
(public static member function) [edit]
gibt die Extent eines mdspan am gegebenen Rangindex zurück
(public member function) [edit]
gibt die Größe des multidimensionalen Indexraums zurück
(public member function) [edit]
prüft, ob die Größe des Indexraums null ist
(public member function) [edit]
erhält den Schritt entlang der angegebenen Dimension
(public member function) [edit]
erhält das Extents-Objekt
(public member function) [edit]
erhält den Zeiger auf die zugrunde liegende 1D-Sequenz
(public member function) [edit]
erhält das Mapping-Objekt
(public member function) [edit]
erhält das Accessor-Richtlinienobjekt
(public member function) [edit]
bestimmt, ob das Mapping dieses mdspan eindeutig ist (jede Indexkombination wird auf ein anderes zugrunde liegendes Element abgebildet)
(public member function) [edit]
bestimmt, ob das Mapping dieses mdspan erschöpfend ist (jedes zugrunde liegende Element kann mit einer Indexkombination erreicht werden)
(public member function) [edit]
bestimmt, ob das Mapping dieses mdspan schrittweise ist (in jeder Dimension überspringt das Inkrementieren eines Index jedes Mal die gleiche Anzahl zugrunde liegender Elemente)
(public member function) [edit]
bestimmt, ob das Layout-Mapping dieses mdspan immer eindeutig ist
(public static member function) [edit]
bestimmt, ob das Layout-Mapping dieses mdspan immer erschöpfend ist
(public static member function) [edit]
bestimmt, ob das Layout-Mapping dieses mdspan immer schrittweise ist
(public static member function) [edit]

[edit] Nicht-Member-Funktionen

spezialisiert den Algorithmus std::swap für mdspan
(function template) [edit]
Unteransichten (Subviews)
(C++26)
gibt eine Ansicht eines Teils eines vorhandenen mdspan zurück
(function template) [edit]
erstellt neue Extents aus den vorhandenen Extents und Slice-Spezifikatoren
(function template) [edit]

[edit] Hilfstypen und Vorlagen

(C++23)
ein Deskriptor eines multidimensionalen Indexraums eines bestimmten Rangs
(class template) [edit]
(C++23)(C++26)
bequeme Alias-Vorlage für ein rein dynamisches std::extents
(alias template)[edit]
ein Typ für den indizierten Zugriff auf Elemente von mdspan
(class template) [edit]
ein Typ für den ausgerichteten Zugriff auf Elemente von mdspan
(class template) [edit]
Layout-Mapping-Richtlinien
spaltenmajorisierte multidimensionale Array-Layout-Mapping-Richtlinie; die linkeste Extent hat einen Schritt von 1
(class) [edit]
zeilenmajorisierte multidimensionale Array-Layout-Mapping-Richtlinie; die rechteste Extent hat einen Schritt von 1
(class) [edit]
eine Layout-Mapping-Richtlinie mit benutzerdefinierten Schritten
(class) [edit]
spaltenmajorisierte Layout-Mapping-Richtlinie mit einem Auffüllschritt, der größer oder gleich der linkesten Extent sein kann
(class template) [edit]
zeilenmajorisierte Layout-Mapping-Richtlinie mit einem Auffüllschritt, der größer oder gleich der rechtesten Extent sein kann
(class template) [edit]
Hilfstypen für Unteransichten
ein Slice-Spezifikator-Tag, der den vollen Bereich von Indizes in der angegebenen Extent beschreibt.
(tag)[edit]
ein Slice-Spezifikator, der eine Menge von regelmäßig beabstandeten Indizes repräsentiert, wie durch einen Offset, eine Extent und einen Schritt angegeben
(class template) [edit]
ein Rückgabetyp der Überladungen von submdspan_mapping
(class template) [edit]

[edit] Deductionsführungen

[edit] 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 aufgefüllte Layouts
__cpp_lib_aligned_accessor 202411L (C++26) std::aligned_accessor

[edit] Beispiel

Kann auf Compiler Explorer in der Vorschau angezeigt 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

[edit] Siehe auch

(C++20)
eine nicht besitzende Ansicht über eine zusammenhängende Sequenz von Objekten
(class template) [bearbeiten]
numerische Arrays, Array-Masken und Array-Slices
(Klassenvorlage) [edit]