最終更新日時(UTC):
が更新

履歴 編集

class template
<mdspan>

std::layout_stride::mapping(C++23)

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

概要

layout_stride::mapping<E>は、extents型の多次元配列サイズEをパラメータとして、次元毎に任意ストライド幅を指定したレイアウトマッピングを表現するクラスである。

layout_stride::mapping<E>トリビアルコピー可能であり、regularのモデルである。

説明専用メンバ変数

layout_stride::mappingクラステンプレートは、下記の説明専用メンバ変数を保持する。

適格要件

  • Extentsextentsの特殊化であること。
  • Extents::rank_dynamic() == 0trueのとき、多次元インデクス空間Extents()のサイズがExtents::index_type型で表現できること。

メンバ関数

構築・破棄

名前 説明 対応バージョン
(constructor) コンストラクタ C++23
(destructor) デストラクタ C++23
operator= コピー代入演算子 C++23

観測

名前 説明 対応バージョン
extents 多次元配列のサイズextents_を取得する C++23
strides ストライド配列strides_を取得する C++23
required_span_size 要素アクセス範囲を取得する C++23
operator() 多次元配列インデクスから要素位置へ変換する C++23
is_exhaustive Exhaustive特性を取得する C++23
stride 指定次元のストライド幅を取得する C++23

静的メンバ関数

名前 説明 対応バージョン
is_always_unique trueを返す C++23
is_always_exhaustive falseを返す C++23
is_always_strided trueを返す C++23
is_unique trueを返す C++23
is_strided trueを返す C++23

メンバ型

名前 説明 対応バージョン
extents_type Extents C++23
index_type Extents::index_type C++23
size_type Extents::size_type C++23
rank_type Extents::rank_type C++23
layout_type layout_stride C++23

非メンバ(Hidden friends)関数

名前 説明 対応バージョン
submdspan_mapping submdspanサポート C++26

比較演算子

名前 説明 対応バージョン
operator== 等値比較 C++23
operator!= 非等値比較 (==により使用可能) C++23

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

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

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

  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

処理系

関連項目

参照