我有一个多维 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
的整体大小?我正在使用 c++11 .
最佳答案
编写一个在编译时计算这个的小实用程序并不难。
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/