Если вы хотите оптимизировать программу по времени выполнения, то необходимо задать нужный размер матрицы с самого начала, так как он у вас известен. Например так:
std::size_t r = 0, c = 0;
std::cin >> r >> c;
std::vector<std::vector<int>> matrix(r, std::vector<int>(c));
Далее, у вас же просто числа, которые можно читать сразу в переменную:
for (std::size_t i = 0; i < c; ++i)
for (std::size_t j = 0; j < r; ++ j)
cin >> matrix[j][i];
Сразу скажу, я это не компилировал, не запускал и не проверял работает или нет. Если возникают какие-то ошибки, то пользуйтесь отладчиком.
PS
Первая ошибка в вашем коде заключается в том, что вектор g пустой в момент обращения по индексу. Замените [] на метод at() и получите исключение.