2012-10-12 56 views
14

可能重复:
How to convert vector to array C++将矢量内容复制到数组中的最快方法?

使用数组时,你必须使用

memcpy(void *destination, const void *source, size_t num); 

但是向量简单的复制方法提供迭代器的能力,使memcpy的无用。将矢量内容复制到另一个位置的最快方法是什么?

+11

在C++中,**总是**使用'std :: copy'而不是'memcpy'(前者会在po ssible)。 – ildjarn

+1

我不知道它有多快,但是你可以使用'std :: copy'。 –

+1

我认为这里最明显的答案是:_为什么(你认为)你需要从矢量拷贝到数组中?_矢量_is_是一个数组,可以这样使用。作为一个副作用,_no_ all_无疑是最快可能的复制操作。 – sbi

回答

31

std::copy,手下。它在内部使用最佳可用方法进行了大量优化。因此它完全与memcpy一致。没有理由使用memcpy,即使在C风格的数组或内存缓冲区之间进行复制。

3

您可以使用memcpy用向量 - 向量保证是连续在内存中,以便提供的矢量不为空,则可以使用&vData[0](其中vData是您的载体)作为源指针memcpy

编辑正如其他答案的评论所述,这只适用于向量的value_type是可复制的。

+2

-1出于与niosi的回答下由ildjarn提及的相同原因。 –

+1

@lidjarn OK够公平 - 我不知道,我相信肯定还有其他人不会这么做,所以我不会删除这个答案。 – mathematician1975

11

您必须在自己的环境中使用您的程序来测量自己。任何其他答案都会有太多的警告。

当你做到这一点,这里是你可以比较一个方法:

std::copy(source.begin(), source.end(), destination); 
5

试试这个: -

std::vector<int> newvector(oldvector); 

对于复制阵列中的尝试: -

std::copy(source.begin(), source.end(), destination); 
+2

-1。 Asker想要一个数组,而不是一个新的向量。 –

+0

对不起,我读错了,然后这将是伟大的回答罗布: - std :: copy(source.begin(),source.end(),destination); –

+0

我刚刚更正。感谢Thanx !!! :) –

相关问题