我想要将doubles 的vector转换为doubles 的一个array任何一个能帮我吗?

2010-05-27 17:14:40
问题评论:

比较回避了一个问题的原因?您可以访问一个向量数组形式。数组是什么一个向量不?

@Michael 我的典型用例是在我自己的代码中使用一个向量,无需调用第三方函数采用数组

围绕所引发的术语会造成混淆。一个指针,不是一个数组。我们想要指向的数组或数组的第一个元素的指针?

绝对真实问题 — 很简单,轻松地解释,太。请重新打开。

回答:

还有一个非常简单的窍门,要这样做,因为现在的规范保证媒介及其元素连续存储︰

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

@ganuke 不复制,您要做一个指针,它指向实际数组向量在内部使用。如果您想要复制GMan 的问题解释了如何

@ganuke:"数组"是什么?您需要提供更多的信息。重要的特性是什么?

@ganuke 不这样做,您只需double*指向相同的数据。此答案适用于完全是这种情况下

由于此行不会复制数据,是否的意味着我不需要删除后我已经完成了它?

@guneykayim 矢量拥有该内存,不应将其释放

怎么的?需要澄清︰ 您需要的数组或数组的第一个元素的指针?

如果要调用需要前者的 API 函数,您可以执行do_something(&v[0], v.size()),其中vdoubles 的向量。一个向量的元素是连续的。

否则,您只需复制的每个元素︰

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

确保不仅 thar arr是足够,但该arr充满,或具有未初始化的值。

嗯。 它不应是双 arr [100];std::copy(v.begin(),v.end(),arr)

@ReedRichards: Haha,是的。相当长的时间去注意 !

注意︰ 使用 v.size() 来获得新的数组元素的数目︰ 双 arr[v.size()];

@rbaleksandar︰ 数组不能包含非常数表达式大小。

@GManNickG︰ 它的工作原理,但我认为这里的某些误解。想象以下︰ 必须处理一大堆的指针指向数组,在不知道您在定义类和它在以后创建刷新各种媒介所需要的各种类型的类并使用其大小参数来确定多少空间的使用。另一个示例︰ 简单的函数 void arrayTest (无符号的整数 arrSize),创建数组 (短 arr[arrSize];) 中使用函数的参数的大小。

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

这保证工作符合标准,但也有一些忠告︰ 特别注意thevector处于范围内时,仅使用thearray

..并确保矢量不是empty(),否则这将调用可怕的副。

向量实际上是在外观下的阵列。如果您有一个函数︰

void f( double a[]);

可以像这样调用它︰

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

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

我认为您最后一行中用于f( &v[0] );

内容来源于Stack Overflow How to convert vector to array C++
请输入您的翻译

How to convert vector to array C++

确认取消