C 中的 std::copy 等价物
Posted
技术标签:
【中文标题】C 中的 std::copy 等价物【英文标题】:std::copy equivalent in C 【发布时间】:2020-04-21 18:04:38 【问题描述】:我有一些 C++ 代码在这些行中使用 std::copy
std::copy(array1, array1 + 4, arrayV + i);
std::copy(array2, array2 + 4, arrayV + i + 4);
在展开循环中。所有数组都是uint8_t*
。
如何将这些行转换为 C 中产生相同结果的等效代码?
【问题讨论】:
memcpy
符合要求吗?
我尝试在这种情况下使用 memcpy memcpy(array1, array1+4, arrayV+i);但由于 array1 和 array2 是 const uint8_t * 我得到一个错误。此外,我在 arrayV + i 部分也遇到了错误。但是代码在c ++中可以正常工作,但我不知道如何正确地将其适应代码c。 @sergeya
我强烈建议您先阅读some documentation for memcpy
,然后再向它提出论据。如果您不知道如何正确使用它,那么很少有东西可以正常工作。
【参考方案1】:
你可以使用memcpy
:
而不是
std::copy(array2, array2 + 4, arrayV + i + 4);
你会的
memcpy(arrayV + i + 4, array2, sizeof(*array2) * 4);
如果内存块可能重叠,你可以使用memove
。
【讨论】:
谢谢,在这种情况下:std::copy(array1,array1+4,arrayV+i);正确地做 memcpy(arrayV + i, array1, sizeof(*array1) * 4); ?或不?在这种情况下,正确的方法是什么?std::copy()
可能会被优化以在内部使用memcpy()
来处理琐碎的可复制类型,是的。以上是关于C 中的 std::copy 等价物的主要内容,如果未能解决你的问题,请参考以下文章