随着 C++ 的最新发展,我们是否有一些通用的多维数组解决方案,其大小仅在运行时已知并且在执行过程中不会改变?
我只找到了 在现代 C++ 中优雅地定义多维数组并且它仅涵盖静态数组。
当然,我可以使用如下语法:
std::vector<std::vector<T>> array2d;
但对于较大数量的维度,这不是很方便,并且对于运行时已知的维度数量几乎不起作用。此外,它还会导致许多内存分配。
我一直在使用我自己的类(一个用于 2D/3D,另一个用于 N 维),其中包含由运算符
new
分配的普通数组和用于寻址元素的数学(如这些 a[x+y*w]
),但也许有一些变化地面到这个?
如果不是,那么
std
不支持2D/3D动态分配数组的原因是什么? (“动态分配”的意思是“哪些大小仅在运行时已知,哪些大小在执行过程中不会改变”,正如我在问题开头所述)。
我猜std::valarray与 std::mdspan 和 std::slice 应该是一个很好的步骤,但是
std::mdspan
对于数组的语法太冗长了。
有什么东西可以很好地组合起来完成这样的任务吗?
在现代 C++ 中,std::mdspan 是一种灵活的多维数组解决方案,其大小仅在运行时已知,无需多次分配即可提供连续内存的视图。然而,它可能很冗长,虽然它不像 std::vector 那样简洁,但它最大限度地减少了开销。或者,像 Eigen 或 Boost.MultiArray 这样的库提供了强大的多维数组处理和运行时大小调整,并且如果可以接受额外的依赖项,则可能会更简单。对动态多维数组的标准支持受到复杂性和性能考虑的限制,使得这些替代方案成为当前最佳选择。