我有一个多维std::array
,正在寻找一种正确的(便捷而有效的)方式来找到其 size (以单元数或字节为单位)
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
或全局变量,因为我正在寻找一种比通过数组传递大小更好的方法(如“ old”数组,而不是std数组),或通知其他人使用定义的术语。
我也不希望每次都不要计算它。
也许这2个首选项不适用于多维数组?
如何有效地找到my_array
的总大小?我正在使用c++11。
答案 0 :(得分:3)
编写一个在编译时进行计算的实用程序并不难。
import { withRouter } from 'react-router'
class Lista2 extends Component {
....
onClick: (e, handleOriginal) => {
this.props.history.push('some-page')
console.log('A Td Element was clicked!')
console.log('it produced this event:', e)
console.log('It was in this column:', column)
console.log('It was in this row:', rowInfo)
console.log('It was in this table instance:', instance)
}
}
export default withRouter(Lista2)
以上内容应阐明任何实际深度的嵌套数组定义,并求值到用于存储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
您可能会看到live。
答案 1 :(得分:2)
如何
List.scrollToIndex(lastIndex)
答案 2 :(得分:2)
您可以使用递归来计算其大小:
template<typename T>
size_t get_array_full_size(T &val) { // for the last array type (double in this case)
return 1;
}
template<typename T, size_t Len>
size_t get_array_full_size(std::array<T, Len> &arr) {
return get_array_full_size(arr[0]) * arr.size();
}
int main() {
std::array<std::array<std::array<std::array<double, 2>, 3>, 6>, 100> my_array;
std::cout << get_array_full_size(my_array) << std::endl;
return 0;
}
答案 3 :(得分:1)
您可以使用绑定到尺寸的constexpr
变量,然后使用这些变量来计算所需的数量。
constexpr int n1 = 2;
constexpr int n2 = 3;
constexpr int n3 = 6;
constexpr int n4 = 100;
std::array<std::array<std::array<std::array<double, n1>, n2>, n3>, n4> my_array;
constexpr int myArraySize = n1*n2*n3*n4;
答案 4 :(得分:1)
类似于 @KorelK 的方法。递归模板功能将在以下情况下停止
std::array
is primitive type的类模板。
#include <array>
#include <type_traits> // std::is_fundamental_v
template<typename Type, std::size_t N>
std::size_t overall_size(const std::array<Type, N>&)
{
if constexpr(std::is_fundamental_v<Type>) return N;
else return N * overall_size(Type{});
}