我如何转换一个std::vector<双>到双数组[]?


当前回答

我们可以使用data()方法来做到这一点。c++ 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;
}

其他回答

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

对什么?您需要澄清:您需要指向数组或数组的第一个元素的指针吗?

如果你正在调用一个期望前者的API函数,你可以执行do_something(&v[0], v.size()),其中v是一个双精度向量。向量的元素是连续的。

否则,你只需要复制每个元素:

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

确保不仅arr足够大,而且arr被填满,或者你有未初始化的值。

向量实际上是皮肤下的数组。如果你有一个函数:

void f( double a[]);

你可以这样调用它:

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

你不应该需要将一个向量转换成一个实际的数组实例。

如果你有一个函数,那么你可能需要这样:foo(&array[0], array.size());。如果你遇到了需要数组的情况,那么你需要重构,向量基本上是扩展数组,你应该总是使用它们。

你可以做一些这样的事情

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;
        }
    }
}