template<class... OtherIndexTypes>
constexpr reference operator[](OtherIndexTypes... indices) const; // (1)
template<class OtherIndexType>
constexpr reference operator[](span<OtherIndexType, rank()> indices) const; // (2)
template<class OtherIndexType>
constexpr reference operator[](const array<OtherIndexType, rank()>& indices) const; // (3)
概要
多次元インデクスを用いて要素にアクセスする。
テンプレートパラメータ制約
- (1) :
(is_convertible_v<OtherIndexTypes, index_type> && ...)
がtrue
、かつ(is_nothrow_constructible_v<index_type, OtherIndexTypes> && ...)
がtrue
、かつsizeof...(OtherIndexTypes) == rank()
がtrue
であること
- (2), (3) :
(is_convertible_v<const OtherIndexTypes&, index_type> && ...)
がtrue
、かつ(is_nothrow_constructible_v<index_type, const OtherIndexTypes&> && ...)
がtrue
であること
事前条件
(1) : パックI
をextents_type::index-cast(as_const(indices))
としたとき、I
はextents()
の多次元インデクスであること。
効果
(1) : 以下と等価
return acc_.access(ptr_, map_(static_cast<index_type>(std::move(indices))...));
(2), (3) : 説明用のパラメータパックP
がis_same_v<make_index_sequence<rank()>, index_sequence<P...>> == true
となるとき、以下と等価
return operator[](extents_type::index-cast(as_const(indices[P]))...);
例
#include <cassert>
#include <mdspan>
int main()
{
int arr[] = {1, 2, 3, 4, 5, 6};
// 静的要素数 2x3 の2次元配列ビュー
std::mdspan<int, std::extents<size_t, 2, 3>> mat{arr};
assert(map[0,0] == 1);
assert(map[1,2] == 6);
}
出力
バージョン
言語
- C++23
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??
関連項目
- C++23 添字演算子の多次元サポート