#include <iostream>
#include <vector>

template<typename T>
std::vector<std::vector<T>> vvalloc(const int rows, const int cols){
    return std::vector<std::vector<T>>(rows, std::vector<T>(cols));
}

template<typename T>
void vvprint(const std::vector<std::vector<T>>& rhs){
    for(int p=0; p<rhs.size(); p++){
        std::cout << "[ ";
        for(int q=0; q<rhs[p].size(); q++){
            std::cout << rhs[p][q] << ' ';
        }
        std::cout << "]" << std::endl;
    }
}

int main(){
    std::vector<std::vector<int>> vvec = vvalloc<int>(3, 3);
    
    int i=0;
    for(int p=0; p<vvec.size(); p++){
        for(int q=0; q<vvec[p].size(); q++){
            vvec[p][q] = i++;
        }
    }
    
    vvprint<int>(vvec);
    return 0;
}