2012-11-29 60 views
6

私はvector<vector<double>を持っていますので、値の表(行列)です。列には惑星の位置と速度が含まれているので、行は同じ惑星のデータを格納します。 valarrayで行を変換したいのは、数学演算が必要なためです。そして、私はベクトルにvalarrays(惑星)を保存したいと思います。 私はこのような試み:std :: vectorを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; 
    } 

このコードが動作しないと私はのvalarrayへのベクターの割り当ての周りに誤差を求める(明らかに許可されていません)。

簡単な方法で達成しようとする方法はありますか?ベクターからのvalarrayを作成するには

+2

あなたのマトリックスのためのプレーンな 'のstd ::ベクトルを'使用する必要がありますし、いくつかの数式を使用して適切なインデックスを計算します。 'std :: vector >'スクリューキャッシュ。 – inf

+0

@bamboon私は、位置と速度の両方を同時に(つまり全体のvalarrayを)統合する数値的なアルゴリズムを作るためにvalarrayが必要です。 –

答えて

8

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

バックベクターにデータを書き込むために:

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

私は 'std :: begin(std :: valarray)'や 'std :: end(std :: valarray)'を認識していませんでした。特に、 'std :: valarray'を構築する際に_non-iterator_引数があります。 'std :: vector'に代入するときにはベクトルから、そして_iterator-like_は引数をとります。どちらの場合でも、予想される引数型は、構築または割り当てられているオブジェクトの型と矛盾しません。 – damienh

関連する問題