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在他的问题中所做的事情?