C++ C++;将memcpy转换为std::copy

C++ C++;将memcpy转换为std::copy,c++,copy,C++,Copy,我想用“std::copy”替换我的“memcpy”,但我就是找不到传递参数的正确方法 我以前的memcpy代码是 memcpy(&uFeatures.Features[0], &((char*)(m_pData))[iBytePos],iByteCount); 我用std::copy尝试了各种方法,但都不起作用 有人能帮忙吗?从你的语法来看,似乎是这样的。(假设功能[0]是char*,如果不是,则需要强制转换(检查注释)) 正如我在你的评论中看到的 我想让编译器决定它喜欢什么

我想用“std::copy”替换我的“memcpy”,但我就是找不到传递参数的正确方法

我以前的memcpy代码是

memcpy(&uFeatures.Features[0], &((char*)(m_pData))[iBytePos],iByteCount);
我用std::copy尝试了各种方法,但都不起作用


有人能帮忙吗?

从你的语法来看,似乎是这样的。(假设功能[0]是char*,如果不是,则需要强制转换(检查注释))

正如我在你的评论中看到的


我想让编译器决定它喜欢什么(memcopy, memmove或其他),这就是我想使用std::copy的原因

编译器不会将
std::copy
转换为
memcpy
。他们没有关系。复制将执行以下操作


uffeatures.Features
m\u pData
的类型是什么?另外,您希望更改为
std::copy
的原因是什么?你试过什么“各种各样的东西”?哇——看了之后我得去洗眼睛了!如果您的代码看起来像这样,我看不出有任何理由不使用memcpy。m_pData是一个映射文件我想让编译器决定它喜欢什么(memcopy、memmove或其他),这就是为什么我要使用std::copy谢谢,但是它对我来说崩溃了。
m\u pData
是否有
iBytePos+ibytecont
字节内存分配给它?@NeelBasu:几乎是这样,但是你把“功能”和字节计数混为一谈了(如果这是
的类型。功能[0]
)。。。指针算法以结构大小的倍数运行,因此您必须将
ibytecont
除以它,并将最后的
char
指针强制转换为
Feature*
,或者将前两个参数中的
Feature*
转换为
char*
。(如果你需要的话,我可以把它们都写出来。)只需在你答案的最后一点上做个笔记。我见过多个编译器(和标准库),
std::copy
最终被降为
memcpy
或类似的指令,事实上,至少对pod类型来说是完全合法的(根据“仿佛”规则)。
std::copy
memcpy
memcpy复制内存块完全不同,而
std::copy
转发迭代器并赋值。根据迭代器的不同,它可能会产生相同的结果。但是两者都不一样,STD::复制不是McCPy的C++版本。
std::copy(&uFeatures.Features[0], &uFeatures.Features[0]+iByteCount, &((char*)(m_pData))[iBytePos])
while (first != last) {
    *d_first++ = *first++;
}