//#(compile) c++; compiler:gsnapshot; options:"-std=c++23"; libs:-
// https://godbolt.org/z/n8jn7v5vb
#include <mdspan>
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 1D: 12 Elemente
vector v{1,2,3,4,5,6,7,8,9,10,11,12};
// 2D: als 2 Zeilen mit je 6 ints
auto ms2 = mdspan(v.data(), 2, 6);
// 3D: als Quader mit 2 Ebenen, 3 Reihen, 2 Spalten
auto ms3 = mdspan(v.data(), 2, 3, 2);
// via 2D-Ansicht schreiben
for (auto i = 0; i != ms2.extent(0); ++i)
for (auto j = 0; j != ms2.extent(1); ++j)
ms2[i, j] = i * 100 + j; // schreiben via mehrdimensionalen Index
// via 3D-Ansicht lesen
for (auto i = 0; i != ms3.extent(0); ++i) {
cout << "Ebene " << i << ":\n";
for (auto j = 0; j != ms3.extent(1); ++j) {
for (auto k = 0; k != ms3.extent(2); ++k)
cout << " " << ms3[i, j, k]; // lesen via mehrdimensionalen Index
cout << '\n';
}
}
// Ausgabe: Ebene 0: 0 1, 2 3, 4 5, Ebene 1: 100 101, 102 103, 104 105
}