c++ - 如何找到多维 std::array 的大小?

标签 c++ c++11 multidimensional-array size stdarray

我有一个多维 std::array 并正在寻找合适的(方便且有效的)方法来找到它的大小(以单元格数或字节数为单位)

size() 只返回最后一个维度大小(理解)

std::array<std::array<std::array<std::array<double, 2>, 3>, 6>, 100> my_array;

my_array.size();  // returns 100

虽然数组的大小在编译时是已知的,但我希望避免使用#define SIZE_OF_MY_ARRAY 或全局变量,因为我正在寻找一种比使用数组传递大小更好的方法 (如在“旧”数组中,而不是标准数组中),或通知其他人使用定义的术语。

我也比较喜欢no每次都计算。

也许这两个首选项对于多维数组是不可能的?

如何有效地找到 my_array 的整体大小?我正在使用 .

最佳答案

编写一个在编译时计算这个的小实用程序并不难。

template<typename T> struct arr_sz {
    static constexpr std::size_t size = sizeof(T);
};

template<typename T, std::size_t N>
struct arr_sz<std::array<T, N>> {
    static constexpr std::size_t size = N * arr_sz<T>::size;
};

上面应该解开任何实际深度的嵌套数组定义,并评估用于存储 T 的字节大小,排除所有可能的填充。

一个使用它的例子是

std::array<std::array<std::array<std::array<double, 2>, 3>, 6>, 100> my_array;
constexpr auto sz = arr_sz<decltype(my_array)>::size;
static_assert(sz == sizeof(double) * 2 * 3 * 6 * 100, ""); 

你可能会看到 live .

关于c++ - 如何找到多维 std::array 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56968333/

相关文章:

c# - 将一维数组粘贴到二维数组中

c++ - 从派生类函数调用基函数?

c++ - 模板函数重载的实例化

c++ - 如何在不相关的类型上实现动态多态性(运行时调用调度)?

C++ 类型特征提取模板参数的特化值

python - 制作向量的多维列表

C++:重新定义不同类型的模板类

c++ - 将对象从一个 unordered_map move 到另一个容器

lambda - lambda 函数的类型是什么?

php - 如果在 php 中包含特定项目,如何从多维数组中删除数组