如何將std::vector<double>
轉換爲double array[]
? 數組
vector<double> thevector; //... double *thearray = &thevector[0];
按照標準能夠保證能夠使用此thearray
,可是有一些警告:特別要注意,只有在thevector
處於範圍內時才使用thearray
。 函數
有一個至關簡單的技巧,由於此規範如今保證向量能夠連續存儲其元素: spa
std::vector<double> v; double* a = &v[0];
向量其實是皮膚下的數組。 若是具備功能: 指針
void f( double a[]);
您能夠這樣稱呼它: code
vector <double> v; v.push_back( 1.23 ) f( &v[0] );
您永遠不須要將向量轉換爲實際的數組實例。 get
作什麼的? 您須要澄清:您是否須要指向數組第一個元素或數組的指針? io
若是要調用指望使用前者的API函數,則能夠執行do_something(&v[0], v.size())
,其中v
是double
s的向量。 向量的元素是連續的。 技巧
不然,您只須要複製每一個元素: bug
double arr[100]; std::copy(v.begin(), v.end(), arr);
確保不只arr
足夠大,並且arr
會被填滿,或者您具備未初始化的值。 copy
對於C ++ 11 , vector.data()
能夠解決問題。