如何将vector转换为C ++中的数组

如何将double s vector转换为double s array

这样做有一个相当简单的技巧,因为规范现在保证向量连续存储元素:

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

做什么的? 你需要澄清一下:你需要一个指向数组的第一个元素的指针吗?

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

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

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

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

对于C ++ 11来说 ,我认为vector.data()可以做到这一点。

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

这是保证按标准工作,但有一些注意事项:特别是在thevector范围内只使用thearray

向量有效地是在皮肤下的数组。 如果你有一个function:

 void f( double a[]); 

你可以这样称呼它:

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

您不需要将vector转换为实际的数组实例。

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

我们可以使用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(); 

你可以做一些这样的事情

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