我如何转换一个std::vector<双>到双数组[]?
当前回答
std::vector<double> vec;
double* arr = vec.data();
其他回答
有一个相当简单的技巧来做到这一点,因为规范现在保证向量连续存储它们的元素:
std::vector<double> v;
double* a = &v[0];
std::vector<double> vec;
double* arr = vec.data();
我们可以使用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;
}
向量实际上是皮肤下的数组。如果你有一个函数:
void f( double a[]);
你可以这样调用它:
vector <double> v;
v.push_back( 1.23 )
f( &v[0] );
你不应该需要将一个向量转换成一个实际的数组实例。
如果你有一个函数,那么你可能需要这样:foo(&array[0], array.size());。如果你遇到了需要数组的情况,那么你需要重构,向量基本上是扩展数组,你应该总是使用它们。
推荐文章
- 找出质数最快的算法是什么?
- 与push()相反;
- 用“+”(数组联合运算符)合并两个数组如何工作?
- c++枚举类可以有方法吗?
- 使arrayList.toArray()返回更具体的类型
- 如何从对象数组中通过对象属性找到条目?
- 如何从关联数组中删除键及其值?
- 格式化IO函数(*printf / *scanf)中的转换说明符%i和%d之间的区别是什么?
- 将析构函数设为私有有什么用?
- main()中的Return语句vs exit()
- 为什么c#不提供c++风格的'friend'关键字?
- 在函数的签名中添加关键字
- 我如何在Visual Studio中预处理后看到C/ c++源文件?
- .Net数据结构:ArrayList, List, HashTable, Dictionary, SortedList, SortedDictionary—速度,内存,以及何时使用每个?
- 为什么在标准容器中使用std::auto_ptr<>是错误的?