如何将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; } } }