В этом случае вы можете сделать шаг Бьёрна еще на шаг дальше и полностью инициализировать 2D-вектор, как вы обрисовали в общих чертах с указанными вами значениями:
std::vector<int> tmp(4,0);
tmp[0] = 1;
tmp[1] = 2;
tmp[2] = 3;
tmp[3] = 1;
std::vector< std::vector<int> > matrix(4, tmp);
Можно просто написать его как:
std::vector<int> tmp(4,1);
tmp[1] = 2;
tmp[2] = 3;
std::vector< std::vector<int> > matrix(4, tmp);
но я часто отдаю предпочтение первому для ясности.