如何获得嵌套向量的维度(嵌套度)(不是大小)?
How do I get the dimensions (nestedness) of a nested vector (NOT the size)?
考虑以下声明:
vector<vector<int> > v2d;
vector<vector<vector<string>> > v3d;
如何在后续代码中找出向量的"dimensionality"?例如,v2d 为 2,v3d 为 3?
你可以这样做:
template<typename T>
int getDims(const T& vec)
{
return 0;
}
template<typename T>
int getDims(const vector<T>& vec)
{
return getDims(T{})+1;
}
旁注:这个数量有时称为“rank”。
这些行的内容:
template<class Y>
struct s
{
enum {dims = 0};
};
template<class Y>
struct s<std::vector<Y>>
{
enum {dims = s<Y>::dims + 1};
};
那么例如,
std::vector<std::vector<double> > x;
int n = s<decltype(x)>::dims; /*n will be 2 in this case*/
有吸引力属性所有的评估都在编译时。
考虑以下声明:
vector<vector<int> > v2d;
vector<vector<vector<string>> > v3d;
如何在后续代码中找出向量的"dimensionality"?例如,v2d 为 2,v3d 为 3?
你可以这样做:
template<typename T>
int getDims(const T& vec)
{
return 0;
}
template<typename T>
int getDims(const vector<T>& vec)
{
return getDims(T{})+1;
}
旁注:这个数量有时称为“rank”。
这些行的内容:
template<class Y>
struct s
{
enum {dims = 0};
};
template<class Y>
struct s<std::vector<Y>>
{
enum {dims = s<Y>::dims + 1};
};
那么例如,
std::vector<std::vector<double> > x;
int n = s<decltype(x)>::dims; /*n will be 2 in this case*/
有吸引力属性所有的评估都在编译时。