Подтвердить что ты не робот

Как получить размеры (вложенность) вложенного вектора (НЕ размер)?

Рассмотрим следующие объявления:

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

Как я могу узнать "размерность" векторов в следующем коде? Например, 2 для v2d и 3 для v3d?

4b9b3361

Ответ 1

Что-то в этих строках:

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

Имеет ли свойство привлекательности все оценки во время компиляции.

Ответ 2

Вы можете сделать что-то вроде этого:

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

Sidenote: эту величину иногда называют " rank".