A vector of vectors may have too much overhead to be a replacement for small multidimensional stack array. (I believe there are cases where it is justified not to want dynamic allocations.)
By the way, do you want to return a copy of the array?
In that case, it might be meaningful to use an out parameter (the contents are copied to a suitable array provided by the caller).
If you don't want a copy, then you might try returning a pointer to pointer (int**).
-----
Best advice depends on what exactly you are doing this for...