2012-11-29 12 views
6

Ich habe eine vector<vector<double>, also eine Tabelle (Matrix) von Werten. Spalten enthält Position und Geschwindigkeit eines Planeten, also speichert Zeilen Daten des gleichen Planeten. Ich möchte eine Zeile in valarray umwandeln, weil ich mathematische Operationen brauche. Dann möchte ich die Vararrays (die Planeten) in einem Vektor speichern. ich so versucht:Weisen Sie einen Std :: Vektor zu einem Std :: Valarray

vector<vector<double>> corps_tmp=configFile.get_corps(); // The function returns a vector<vector<double>> 

    valarray<double> corpX; 
    for (int i(0); i < corps_tmp.size(); i++) { 
     corpX = corps_tmp[i]; // I want to save the first row of the vector<vector<double>> on the valarray 
     corps.push_back(corpX); // I want to ''add'' the valarray to a vector. 
     corpX = 0; 
    } 

Dieser Code nicht funktioniert hat und ich erhalte einen Fehler um die Zuweisung eines Vektors zu einem valarray (anscheinend nicht zulässig).

Gibt es eine Möglichkeit, auf einfache Weise zu erreichen, was ich versucht habe?

+2

Sie ein einfaches 'std :: vector ' für Ihre Matrix verwendet werden soll und Verwenden Sie einige Formeln, um den richtigen Index zu berechnen. 'Std :: Vektor >' Schrauben Cache. – inf

+0

@bamboon Ich brauche vararray, um einen numerischen Agorithmus zu erstellen, der gleichzeitig Position und Geschwindigkeit integriert (also das ganze valarray). –

Antwort

8

Um einen valarray aus einem Vektor zu erstellen:

std:valarray<double> corpX(corps_tmp[i].data(), corps_tmp[i].size()); 

die Daten zurück in einen Vektor zu schreiben:

corps_tmp[i].assign(std::begin(corpX), std::end(corpX)); 
+0

Mir war 'std :: begin (std :: valarray) 'oder' std :: end (std :: valarray) 'nicht bekannt. Insbesondere haben wir _non-iterator_ Argumente, wenn wir ein' std :: valarray' konstruieren aus einem Vektor und _iterator-like_ Argumente bei der Zuweisung zu einem 'std :: vector' - in beiden Fällen stimmen die erwarteten Argumenttypen mit dem Typ des Objekts überein, das konstruiert oder zugewiesen wird. – damienh