Как преобразовать вектор в массив

Как мне constd :: vector <double> ert a double array[]to ?std::vector<double> v; double* a = &v[0];

c++,arrays,vector,

258

Ответов: 9


435 голосов принято

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

do_something(&v[0], v.size())

107

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

Если вы вызываете функцию API, которая ожидает первую, вы можете сделать , где вектор s. Элементы вектора смежны.double arr[100]; std::copy(v.begin(), v.end(), arr);varr

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

arr

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


Для C ++ 11 , vector.data()будет делать трюк.


15
vector<double> thevector;
//...
double *thearray = &thevector[0];

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


13

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

void f( double a[]);

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

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

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

C ++, массивы, вектор,