Как преобразовать вектор для выстраивания

Как я преобразовываю a std::vector<double> к a double array[]?

320
задан Drise 19 March 2018 в 07:46
поделиться

4 ответа

Для этого есть довольно простой трюк, поскольку теперь спецификация гарантирует, что векторы хранят свои элементы непрерывно:

std::vector<double> v;
double* a = &v[0];
497
ответ дан 23 November 2019 в 00:58
поделиться
vector<double> thevector;
//...
double *thearray = &thevector[0];

Это гарантированно работает по стандарту, однако есть некоторые предостережения: в частности, следует использовать только массив , пока вектор входит в область действия.

16
ответ дан 23 November 2019 в 00:58
поделиться

Векторы фактически являются массивами под кожей. Если у вас есть функция:

void f( double a[]);

вы можете вызвать ее следующим образом:

vector <double> v;
v.push_back( 1.23 )
f( &v[0] );

Вам никогда не понадобится преобразовывать вектор в реальный экземпляр массива.

13
ответ дан 23 November 2019 в 00:58
поделиться

Зачем? Вам нужно уточнить: Вам нужен указатель на первый элемент массива или массив?

Если вы вызываете API-функцию, которая ожидает первое, вы можете сделать do_something(&v[0], v.size()), где v - вектор из doubleов. Элементы вектора являются смежными.

Иначе вам придется просто копировать каждый элемент:

double arr[100];
std::copy(v.begin(), v.end(), arr);

Убедитесь не только в том, что arr достаточно велик, но и в том, что arr заполнен, иначе у вас будут неинициализированные значения.

138
ответ дан 23 November 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: