Как я преобразовываю a std::vector<double>
к a double array[]
?
Для этого есть довольно простой трюк, поскольку теперь спецификация гарантирует, что векторы хранят свои элементы непрерывно:
std::vector<double> v;
double* a = &v[0];
vector<double> thevector;
//...
double *thearray = &thevector[0];
Это гарантированно работает по стандарту, однако есть некоторые предостережения: в частности, следует использовать только массив
, пока вектор
входит в область действия.
Векторы фактически являются массивами под кожей. Если у вас есть функция:
void f( double a[]);
вы можете вызвать ее следующим образом:
vector <double> v;
v.push_back( 1.23 )
f( &v[0] );
Вам никогда не понадобится преобразовывать вектор в реальный экземпляр массива.
Зачем? Вам нужно уточнить: Вам нужен указатель на первый элемент массива или массив?
Если вы вызываете API-функцию, которая ожидает первое, вы можете сделать do_something(&v[0], v.size())
, где v
- вектор из double
ов. Элементы вектора являются смежными.
Иначе вам придется просто копировать каждый элемент:
double arr[100];
std::copy(v.begin(), v.end(), arr);
Убедитесь не только в том, что arr
достаточно велик, но и в том, что arr
заполнен, иначе у вас будут неинициализированные значения.