如何获取嵌套向量的尺寸(嵌套性)(不是大小)

How do I get the dimensions (nestedness) of a nested vector (NOT the size)?

本文关键字:嵌套 向量 何获取 获取      更新时间:2023-10-16

请考虑以下声明:

vector<vector<int> > v2d;
vector<vector<vector<string>> > v3d;

如何在后续代码中找出向量的"维数"?例如,2 表示 v2d,3 表示 v3d?

这些行的内容:

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*/

具有吸引人的属性,即所有评估都在编译时进行。

你可以做这样的事情:

template<typename T>
int getDims(const T& vec)
{
   return 0;
}
template<typename T>
int getDims(const vector<T>& vec)
{
   return getDims(T{})+1;
}

旁注:此数量有时称为"等级"。