std::extents, std::dextents, std::dims

来自cppreference.com
< cpp‎ | container‎ | mdspan
 
 
 
 
 
在标头 <mdspan> 定义
template< class IndexType, std::size_t... Extents >
class extents;
(1) (C++23 起)
template< class IndexType, std::size_t Rank >
using dextents = /* 见下文 */
(2) (C++23 起)
template< std::size_t Rank, class IndexType = std::size_t >
using dims = std::dextents<IndexType, Rank>;
(3) (C++26 起)
1) 表示一个秩等于 sizeof...(Extents) 的多维索引空间。
2) 用于全动态 extents 的便利别名模板。令 d 代表 std::dynamic_extent,其每个特化 dextents<IndexType, Rank> 均等价于 extents<IndexType /*, d, d, ..., d*/>(即重复共 Rankd)。
3) 用于全动态 extents 的便利别名模板,其以 std::size_t 作为默认索引类型。

extents 的每个特化均实现 regular 且为 可平凡复制 (TriviallyCopyable)

模板形参

IndexType - 各个非动态 Extents 的类型。应当为有符号或无符号整数类型。否则程序非良构
Extents - 表示每个秩索引的尺度(整数区间的大小)。其各个元素要么等于 std::dynamic_extent(此种情况它表示一个动态尺度,而尺度大小则动态确定),要么可表示为 IndexType 类型的值(由此它表示一个静态尺度,尺度大小就是它的值),要么程序就非良构
Rank - 代表全动态 extents 的秩

成员类型

成员类型 定义
index_type IndexType
size_type std::make_unsigned_t<index_type>
rank_type std::size_t

数据成员

dynamic-extents (私有) std::array<index_type, rank_dynamic()> 类型的数组,它存储各个动态尺度的大小。
(仅用于阐述的成员对象*)

成员函数

构造 extents
(公开成员函数)
观察器
[静态]
返回 extents 的静态秩
(公开静态成员函数)
返回 extents 的动态秩
(公开静态成员函数)
返回 extents 在特定秩索引上的静态尺度大小
(公开静态成员函数)
返回 extents 在特定秩索引上的动态尺度大小
(公开成员函数)
辅助类型
返回范围 [0i) 中各尺度大小的乘积
(仅用于阐述的成员函数*)
返回范围 [i + 1rank()) 中的各尺度大小的乘积
(仅用于阐述的成员函数*)
将输入转型为整数类型
(仅用于阐述的成员函数*)
返回特定秩索引以下的动态尺度的数量
(仅用于阐述的成员函数*)
返回数值 r,使得对于某个特定实参 i,范围 [0r + 1) 中恰好有 i + 1 个动态尺度
(仅用于阐述的成员函数*)

非成员函数

在两个 extents 的每个维度上比较底层尺度
(函数)

推导指引(C++23)

示例

参阅

(C++11)
获取数组类型的维数
(类模板)
(C++11)
获取数组类型在指定维度的大小
(类模板)