Generic vector of vectors in C++

Is there a good way in C++ to implement (or fake) a type for a generic vector of vectors?

Ignore the issue of when a vector of vectors is a good idea (unless there's something equivalent which is always better). Assume that it does accurately model the problem, and that a matrix does not accurately model the problem. Assume also that templated functions taking these things as parameters do need to manipulate the structure (e.g. calling push_back), so they can't just take a generic type supporting [][].

What I want to do is:

template<typename T>
typedef vector< vector<T> > vecvec;

vecvec<int> intSequences;
vecvec<string> stringSequences;

but of course that's not possible, since typedef can't be templated.

#define vecvec(T) vector< vector<T> >

is close, and would save duplicating the type across every templated function which operates on vecvecs, but would not be popular with most C++ programmers.


You want to have template-typedefs. That is not yet supported in the current C++. A workaround is to do

template<typename T>
struct vecvec {
     typedef std::vector< std::vector<T> > type;
};

int main() {
    vecvec<int>::type intSequences;
    vecvec<std::string>::type stringSequences;
}

In the next C++ (called c++0x, c++1x due to 2010), this would be possible:

template<typename T>
using vecvec = std::vector< std::vector<T> >;

I use Boost.MultiArray which is implemented in the boost library.

HTH