|
| 1 | +# layout_left_padded |
| 2 | +* mdspan[meta header] |
| 3 | +* class template[meta id-type] |
| 4 | +* std[meta namespace] |
| 5 | +* cpp26[meta cpp] |
| 6 | + |
| 7 | +```cpp |
| 8 | +namespace std { |
| 9 | + template<size_t PaddingValue = dynamic_extent> |
| 10 | + struct layout_left_padded { |
| 11 | + template<class Extents> |
| 12 | + class mapping; |
| 13 | + }; |
| 14 | +} |
| 15 | +``` |
| 16 | +* dynamic_extent[link /reference/span/dynamic_extent.md] |
| 17 | +* Extents[link extents.md] |
| 18 | +* mapping[link layout_left_padded/mapping.md.nolink] |
| 19 | +
|
| 20 | +## 概要 |
| 21 | +`layout_left_padded`は、多次元配列ビュー[`mdspan`](mdspan.md)に対して、パディングあり列優先(column major)[レイアウトマッピング](LayoutMapping.md)を表現するポリシークラスである。 |
| 22 | +
|
| 23 | +全要素が隣接配置される[`layout_left`](layout_left.md)とは異なり、`layout_left_padded`では最左次元の隣次元(第1次元)ストライド幅`stride(1)`が最左次元の要素数`extent(0)`よりも大きい、つまり第1次元においてパディングが挿入される可能性がある。 |
| 24 | +
|
| 25 | +`layout_left_padded`の特殊化は、[レイアウトマッピングポリシー要件](LayoutMappingPolicy.md)を満たす[トリビアル型](/reference/type_traits/is_trivial.md)である。 |
| 26 | +
|
| 27 | +
|
| 28 | +## メンバ型 |
| 29 | +
|
| 30 | +| 名前 | 説明 | 対応バージョン | |
| 31 | +|------|------|----------------| |
| 32 | +| [`mapping`](layout_left_padded/mapping.md.nolink) | レイアウトマッピング | C++26 | |
| 33 | +
|
| 34 | +
|
| 35 | +## 例 |
| 36 | +```cpp example |
| 37 | +#include <mdspan> |
| 38 | +#include <print> |
| 39 | +
|
| 40 | +int main() |
| 41 | +{ |
| 42 | + double arr[] = {1, 2, 0, 0, 3, 4, 0, 0, 5, 6, 0, 0}; |
| 43 | + // 1 3 5 |
| 44 | + // 2 4 6 |
| 45 | + // - - - |
| 46 | + // - - - |
| 47 | +
|
| 48 | + // 要素数2x3の2次元配列/列優先レイアウト/アライメント4 |
| 49 | + using Ext2x3 = std::extents<size_t, 2, 3> |
| 50 | + std::mdspan<double, Ext2x3, std::layout_left_padded<4>> mat{arr}; |
| 51 | +
|
| 52 | + for (size_t i = 0; i < mat.extent(0); ++i) { |
| 53 | + for (size_t j = 0; j < mat.extent(1); ++j) { |
| 54 | + std::print("{}{}", (j ? " " : ""), mat[i, j]); |
| 55 | + } |
| 56 | + std::println(); |
| 57 | + } |
| 58 | +} |
| 59 | +``` |
| 60 | +* std::layout_left_padded[color ff0000] |
| 61 | +* extent[link mdspan/extent.md] |
| 62 | + |
| 63 | +### 出力 |
| 64 | +``` |
| 65 | +1 3 5 |
| 66 | +2 4 6 |
| 67 | +``` |
| 68 | + |
| 69 | + |
| 70 | +## バージョン |
| 71 | +### 言語 |
| 72 | +- C++26 |
| 73 | + |
| 74 | +### 処理系 |
| 75 | +- [Clang](/implementation.md#clang): ?? |
| 76 | +- [GCC](/implementation.md#gcc): ?? |
| 77 | +- [ICC](/implementation.md#icc): ?? |
| 78 | +- [Visual C++](/implementation.md#visual_cpp): ?? |
| 79 | + |
| 80 | + |
| 81 | +## 関連項目 |
| 82 | +- [`layout_left`](layout_left.md) |
| 83 | + |
| 84 | + |
| 85 | +## 参照 |
| 86 | +- [P2642R5 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2642r5.html) |
0 commit comments