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

履歴 編集

class
<mdspan>

# std::layout_right(C++23)

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

## 概要

`layout_right`は、多次元配列ビュー`mdspan`に対して、C/C++多次元配列と互換性のある行優先(row major)レイアウトマッピングを表現するポリシークラスである。

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

ポリシークラス名の由来は、多次元インデクスのうち最右次元が隣接配置（ストライド幅=1）され、インデクス次元の右から左の順にストライド幅が増大するところから来ている。

## メンバ型

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

## 例

    #include <mdspan>
    #include <iostream>

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

      // 要素数2x3の2次元配列／行優先レイアウト
      using Ext2x3 = std::extents<size_t, 2, 3>;
      std::mdspan<double, Ext2x3, std::layout_right> mat{arr};

      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_stride`

## 参照

- P0009R18 MDSPAN