Modernes C++ programmieren

Okt 23, 2024

lst-0734-book.cpp

// 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
}