Вы можете попробовать использовать std::memcpy
в цикле для каждой строки.
for (int i = 0; i<rows; i++)
{
std::memcpy(buf + i*cols, &rho_mat[i][0], cols * sizeof(double));
}
Обратите внимание, что вы должны использовать cols в вашем memcpy, чтобы обеспечить копирование каждой строки.В вашем примере это могло бы быть совпадением, если бы ваша матрица была квадратной.
Вы можете обратиться к этому ответу о том, как скопировать 1-й вектор, используя memcpy.
Редактировать:
Для копирования из двумерного массива в двумерный вектор (при условии, что вектор уже имеет размерные строки * столбцы)
for (int i = 0; i<rows; i++)
{
std::memcpy(&rho_mat[i][0], buf + i*cols, cols * sizeof(double));
}
Обратите внимание насделанное предположение
ИЛИ
Гораздо чище было бы использовать std::assign
или конструктор для std::vector
if(rho_mat.size() == 0)
{
for (int i = 0; i<rows; i++)
{
rho_mat.push_back(vector<int>(buf + i*cols, buf + i*cols + cols));
//OR
//rho_mat.push_back(vector<int>());
//rho_mat[i].assign(buf + i*cols, buf + i*cols + cols);
}
}