C++ 中动态分配的多维数组

问题描述 投票:0回答:1

随着 C++ 的最新发展,我们是否有一些通用的多维数组解决方案,其大小仅在运行时已知并且在执行过程中不会改变?

我只找到了 在现代 C++ 中优雅地定义多维数组并且它仅涵盖静态数组。

当然,我可以使用如下语法:

std::vector<std::vector<T>> array2d;

但对于较大数量的维度,这不是很方便,并且对于运行时已知的维度数量几乎不起作用。此外,它还会导致许多内存分配。

我一直在使用我自己的类(一个用于 2D/3D,另一个用于 N 维),其中包含由运算符

new
分配的普通数组和用于寻址元素的数学(如这些
a[x+y*w]
),但也许有一些变化地面到这个?

如果不是,那么

std
不支持2D/3D动态分配数组的原因是什么? (“动态分配”的意思是“哪些大小仅在运行时已知,哪些大小在执行过程中不会改变”,正如我在问题开头所述)。

我猜std::valarraystd::mdspanstd::slice 应该是一个很好的步骤,但是

std::mdspan
对于数组的语法太冗长了。

有什么东西可以很好地组合起来完成这样的任务吗?

c++ arrays multidimensional-array std std-ranges
1个回答
0
投票

在现代 C++ 中,std::mdspan 是一种灵活的多维数组解决方案,其大小仅在运行时已知,无需多次分配即可提供连续内存的视图。然而,它可能很冗长,虽然它不像 std::vector 那样简洁,但它最大限度地减少了开销。或者,像 Eigen 或 Boost.MultiArray 这样的库提供了强大的多维数组处理和运行时大小调整,并且如果可以接受额外的依赖项,则可能会更简单。对动态多维数组的标准支持受到复杂性和性能考虑的限制,使得这些替代方案成为当前最佳选择。

© www.soinside.com 2019 - 2024. All rights reserved.