Según la boost matrix documentation, hay 3 constructores de la clase de matriz: vacío, copia, y una toma de dos size_types para el número de filas y columnas. Como el impulso no lo define (probablemente porque hay muchas maneras de hacerlo y no todas las clases tienen que definir una conversión en cualquier otra clase), necesitará definir la conversión.
Este es un enfoque que usaría, pero dado que hay varias maneras de hacerlo y la pregunta no especifica cómo se quiere hacer esto, puede encontrar un enfoque diferente más aplicable a su situación.
void Foo(const std::vector<double> & v) {
size_t m = ... // you need to specify
size_t n = ... // you need to specify
if(v.size() < m * n) { // the vector size has to be bigger or equal than m * n
// handle this situation
}
matrix<double> mat(m, n);
for(size_t i=0; i<mat.size1(); i++) {
for(size_t j=0; j<mat.size2(); j++) {
mat(i,j) = v[i+j*mat.size1()];
}
}
}
Un par de notas acerca de su código proporcionado: std :: vector necesita un argumento de plantilla y que están declarando m
como una matriz y un argumento de entrada a la misma del constructor.
Una matriz es una estructura de dos dimensiones, un vector es un uno estructura dimensional ¿Cómo planeas determinar las dimensiones correctas de la matriz inspeccionando el vector? – Mankarse