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 等价物的主要内容,如果未能解决你的问题,请参考以下文章

Python 中的 C _IOR 函数的等价物是啥?

将 Objective C“代码块”转换为 C++ 中的等价物

c ++ opencv中的等价matlab代码

Java 中的 C++ Pair<L,R> 等价物是啥?

Java 中的 Sprintf 等价物

C# 中的 Java matchesAt() 等价物