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

履歴 編集

class template
<mdspan>

std::layout_right_padded(C++26)

namespace std {
  template<size_t PaddingValue = dynamic_extent>
  struct layout_right_padded {
    template<class Extents>
    class mapping;
  };
}

概要

layout_right_paddedは、多次元配列ビューmdspanに対して、パディングあり行優先(row major)レイアウトマッピングを表現するポリシークラスである。

全要素が隣接配置されるlayout_rightとは異なり、layout_right_paddedでは最右次元の隣次元(第R-2次元)ストライド幅stride(extents_type::rank() - 2)が最右次元の要素数extent(extents_type::rank() - 1)よりも大きい、つまり第R-2次元においてパディングが挿入される可能性がある。

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

メンバ型

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

#include <mdspan>
#include <print>

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

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

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

出力

1 2 3
4 5 6

バージョン

言語

  • C++26

処理系

関連項目

参照