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

Как преобразовать vector из double в array из double s?

Ответ 1

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

std::vector<double> v;
double* a = &v[0];

Ответ 2

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

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

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

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

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

Ответ 3

Для С++ 11, я думаю, vector.data() выполнит трюк.

Ответ 4

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

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

Ответ 5

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

void f( double a[]);

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

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

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

Ответ 6

Если у вас есть функция, вам, вероятно, понадобится следующее: foo(&array[0], array.size());. Если вам удалось попасть в ситуацию, когда вам нужен массив, вам нужно реорганизовать, векторы - это в основном расширенные массивы, вы всегда должны их использовать.

Ответ 7

Мы можем сделать это с помощью метода data(). С++ 11 предоставляет этот метод.

Фрагмент кода

#include<bits/stdc++.h>
using namespace std;


int main()
{
  ios::sync_with_stdio(false);

  vector<int>v = {7, 8, 9, 10, 11};
  int *arr = v.data();

  for(int i=0; i<v.size(); i++)
  {
    cout<<arr[i]<<" ";
  }

  return 0;
}

Ответ 8

std::vector<double> vec;
double* arr = vec.data();

Ответ 9

Вы можете сделать что-то вроде этого

vector <int> id;
vector <double> v;

if(id.size() > 0)
{
    for(int i = 0; i < id.size(); i++)
    {
        for(int j = 0; j < id.size(); j++)
        {
            double x = v[i][j];
            cout << x << endl;
        }
    }
}