среда, 13 мая 2015 г.

Вложенность произвольных контейнеров

#include <iostream>
#include <vector>
#include <list>
#include <deque>
using namespace std;

template <class T>
struct inCount{
    enum {result = 0};  
};

template<class T,template <class TT,class alloc = allocator<TT> > class CON>
struct inCount<CON<T> > {
    enum {result = inCount<T>::result +1};
};

template <class T>
int foo(T const & t) {
    return inCount<T>::result;
}

int main() {
    // your code goes here
    vector< vector< list<vector <list<deque<int> > > > > > v;
  
    cout << foo(v);
    return 0;
}

Узнать вложенность вектора

#include <iostream>
#include <vector>
using namespace std;

template <class T>
struct inCount{
    enum {result = 0};   
};

template<class T>
struct inCount<vector<T> > {
    enum {result = inCount<T>::result +1};
};

template <class T>
int foo(T const & t) {
    return inCount<T>::result;
}

int main() {
    // your code goes here
    vector< vector< vector<int> > > v;
   
    cout << foo(v);
    return 0;
}