C++ C++;:复制一段双打的最快方法

C++ C++;:复制一段双打的最快方法,c++,optimization,C++,Optimization,目前,我有以下代码将一些双精度复制到不同的双精度向量 for (int i = 0;i<=iTo;i++) { int iID= i + iOff; double d=m[iID]; uTargets[iSamplePos]=d; iSamplePos++; } for(int i=0;i如果要覆盖现有向量: uTargets.assign(m.begin() + iOff, m.begin() + iOff + iTo + 1); 如果要复制到已存在

目前,我有以下代码将一些双精度复制到不同的双精度向量

for (int i = 0;i<=iTo;i++)
{

    int iID= i + iOff;
    double d=m[iID];
    uTargets[iSamplePos]=d;
    iSamplePos++;
}

for(int i=0;i如果要覆盖现有向量:

uTargets.assign(m.begin() + iOff, m.begin() + iOff + iTo + 1);
如果要复制到已存在的范围中:

std::copy(m.begin() + iOff, m.begin() + iOff + iTo + 1, uTargets.begin() + iSamplePos);

如果要覆盖现有向量:

uTargets.assign(m.begin() + iOff, m.begin() + iOff + iTo + 1);
如果要复制到已存在的范围中:

std::copy(m.begin() + iOff, m.begin() + iOff + iTo + 1, uTargets.begin() + iSamplePos);
您可以使用memcpy(uTargets,m+iOFF,(iTo-iOFF+1)*sizeof(double)); 但我会坚持使用更可靠的方法,如迭代法或std::copy,除非您需要复制大量内存。

您可以使用memcpy(uTargets,m+iOFF,(iTo-iOFF+1)*sizeof(double));
但是我会坚持使用更可靠的方法,如迭代或STD::复制,除非你需要复制一个非常大的内存。

< P>请检查C++标准库的部分文档。< /P> 算法库为各种目的定义函数 (例如,搜索、排序、计数、操作)在 元素的范围。请注意,范围定义为[第一个,最后一个] 其中,last是指经过最后一个要检查的元件,或 修改

一般来说,对于以不同方式遍历容器并对其元素应用某种转换之类的操作,您应该依赖于标准接口

在您的特定情况下,您提到有两个向量(我假设您指的是类
std::vector
)的对象

正如其他人提到的,您可以使用算法
std::copy
,该算法采用以下语法:

std::copy(source.begin(), source.end(), destination.begin())
现在,您必须注意这里。这假设
目的地
已经保留了空间。也就是说,在您创建的目的地之前的某个位置:

std::vector<double> destination(source.size());
输出(使用C++11支持的g++4.7.2编译,即
C++file.cpp-std=C++11
):


请检查C++标准库的部分文档。

算法库为各种目的定义函数 (例如,搜索、排序、计数、操作)在 元素的范围。请注意,范围定义为[第一个,最后一个] 其中,last是指经过最后一个要检查的元件,或 修改

一般来说,对于以不同方式遍历容器并对其元素应用某种转换之类的操作,您应该依赖于标准接口

在您的特定情况下,您提到有两个向量(我假设您指的是类
std::vector
)的对象

正如其他人提到的,您可以使用算法
std::copy
,该算法采用以下语法:

std::copy(source.begin(), source.end(), destination.begin())
现在,您必须注意这里。这假设
目的地
已经保留了空间。也就是说,在您创建的目的地之前的某个位置:

std::vector<double> destination(source.size());
输出(使用C++11支持的g++4.7.2编译,即
C++file.cpp-std=C++11
):


memcpy永远是最快的方式。而且常常是毫无根据的。人们有时使用它来复制几个值。交换src和dst或写越界非常容易。memcpy永远是最快的方式。而且常常是毫无根据的。人们有时使用它来复制几个值。交换src和dst或写越界非常容易.为什么std::copy会有任何不同?它肯定会做OP在他的问题中所做的事情?为什么std::copy会有任何不同?它肯定会做OP在他的问题中所做的事情?