Według boost matrix documentation istnieją 3 konstruktorów dla klasy matrycy: pusty, kopiowanie i jeden biorąc dwa size_types na liczbę wierszy i kolumn. Ponieważ boost nie definiuje go (prawdopodobnie dlatego, że istnieje wiele sposobów na to, a nie każda klasa jest w stanie zdefiniować konwersję na każdą inną klasę), będziesz musiał zdefiniować konwersję.
Oto podejście, którego bym użył, ale ponieważ istnieje wiele sposobów, aby to zrobić, a pytanie nie określa, w jaki sposób chcesz to zrobić, możesz znaleźć inne podejście, które będzie bardziej pasowało do Twojej sytuacji.
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()];
}
}
}
Kilka uwag na temat swojej przewidzianej kodu: std :: vector potrzebuje szablonie argumentu i jesteś uznającej m
jako matryca i argumentu wejściowego do jego konstruktora.
Matryca jest dwuwymiarowa struktura, wektor jest jeden struktura wymiarowa. W jaki sposób planujesz określić prawidłowe wymiary matrycy, sprawdzając wektor? – Mankarse