2011-01-23 19 views
4

vector<vector<double> >型の変数を関数F(double ** mat, int m, int n)に渡そうとしています。 F関数は別のlibから来ているので、私はそれを変更するオプションがありません。誰かが私にこれについていくつかのヒントを与えることができますか?ありがとう。C++ベクトル<vector <double>> double **

答えて

7

vector<vector<double> >およびdouble**は全く異なるタイプです。しかし、いくつかのダブルポインタを格納し、別のベクターの助けを借りて、この機能を供給することが可能である:

vector<vector<double> > thing = ...; 
vector<double*> ptrs (thing.size()); 
for (unsigned i=0, e=ptrs.size(); i<e; ++i) { 
    ptrs[i] = &(thing[i][0]); // assuming !thing[i].empty() 
} 
your_function(&ptrs[0],...); 

は、この作品の理由の一つは、すべての要素がメモリにconsecutivly格納されていることを理由のstd ::ベクトルの保証です。

+0

@Daniel:Corrected – Novelocrat

1

私はそれを参照してください方法は、ネストされた配列の中にすべての値をコピーし、あなたのvector<vector<double> >が正しいデータ型に変換する必要があるプロセスで

ベクトルは、アレイよりも完全に異なる方法で組織され、したがって、データ型を強制的に一致させることができたとしても、それはまだ機能しません。

残念ながら、私のC++の経験は数年前のことです。ここで具体的な例を挙げることはできません。

1

ベクトル<ベクトル< double >>は、mへのダブルポインタとほとんど同じではありません。見た目から、mは2次元配列であると仮定され、ベクトルはギザギザで格納され、メモリ内で必ずしも隣接しているとは限りません。それを渡す場合は、vector値をtemp 2dimのdouble配列にコピーして、代わりにその値を渡す必要があります。

関連する問題