最終更新日時: 2024年01月19日 00時38分06秒 (JST)
yoh が更新

履歴 編集

class
<mdspan>

# std::layout_stride(C++23)

    namespace std {
      struct layout_stride {
        template<class Extents>
        class mapping;
      };
    }

## 概要

`layout_stride`は、多次元配列ビュー`mdspan`に対して、次元毎に任意ストライド幅を指定したレイアウトマッピングを表現するポリシークラスである。

`layout_stride`は、レイアウトマッピングポリシー要件を満たすトリビアル型である。

## メンバ型

名前 | 説明 | 対応バージョン
--- | --- | ---
`mapping` | レイアウトマッピング | C++23

## 例

    #include <array>
    #include <mdspan>
    #include <iostream>

    int main()
    {
      double arr[] = {1, 2, 3, 0, 4, 5, 6, 0};

      // 要素数2x3の2次元配列／行優先かつパディングありレイアウト
      using Ext2x3 = std::extents<size_t, 2, 3>;
      std::array<int, 2> strides{4, 1};
      std::layout_stride::mapping<Ext2x3> mapping{{}, strides};
      std::mdspan<double, Ext2x3, std::layout_stride> mat{arr, mapping};

      for (size_t i = 0; i < mat.extent(0); ++i) {
        for (size_t j = 0; j < mat.extent(1); ++j) {
          std::cout << (j ? " " : "") << mat[i, j];
        }
        std::cout << "\n";
      }
    }

### 出力

    1 2 3
    4 5 6

## バージョン

### 言語

- C++23

### 処理系

- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??

## 関連項目

- `layout_left`
- `layout_right`

## 参照

- P0009R18 MDSPAN