Fill Constructor:
#define M 4
#define N 4
// one step, recommended
std::vector<std::vector<int>> matrix(M, std::vector<int>(N, 0));
// two steps
std::vector<int> row(N, 0);
std::vector<std::vector<int>> matrix2(M, row);
resize function:
#define M 4
#define N 4
std::vector<std::vector<int>> matrix(M);
for (int i = 0 ; i < M ; i++)
matrix[i].resize(N, 0);
std::vector<std::vector<int>> matrix2;
matrix2.resize(M, std::vector<int>(N, 0));
C++ Initializer lists:
std::vector<std::vector<int>> matrix {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};