理论上支持任意维度,但实际上最高只支持 32 维(通常由实现限制)
// mdspan 是 C++ 23 的新特性 // 以下的代码简单演示了其用法,但是没有测试 // 2025/05 几乎没有编译器可以成功编译(即使是标榜自己支持C++ 23的编译器) // Mac 的 g++ 可以找到mdspan的头文件,但是没有实现"()"操作符(不完整的实现) #include <mdspan> #include <iostream> #include <vector> #include <cstdint> int main() { std::vector<int32_t> data(10); // 原始数据 for (int i = 0; i < 10; ++i) data[i] = i; // 指定 view 的维度和尺寸,可以使用动态占位符(std::dynamic_extent) // 使用非固定长度的话,需要在构造函数中传递参数指明长度 std::mdspan<int32_t, std::extents<size_t, 2, 5>, std::layout_right> span( data.data() ); for (int i = 0; i < span.extent(0); ++i) { for (int j = 0; i < span.extent(1); ++j) { std::cout << span(i, j) << " "; } std::cout << std::endl; } }