c++ - 如何使用 std::copy() 复制到指向通用字节缓冲区开头的指针的目标?

标签 c++ vector std

在此示例中,假设 myVector 是某个自定义类型 myType 的 std::vector。

unsigned char* bufferPtr = myBufferOfBytes.getBufferPointer();
std::copy(myVector.begin(), myVector.end(), bufferPtr);

这有可能以某种方式实现,还是我只能使用 std::memcpy() 实现?

最佳答案

您可以使用 uninitialized_copy 并将 bufferPtr 转换为预期的类型:

std::uninitialized_copy(myVector.begin(), myVector.end(), reinterpret_cast<myType*>(bufferPtr));

通常的警告适用:

  • 确保 bufferPtr 对整个拷贝来说足够长;
  • bufferPtr 最初必须分配为 unsigned char 数组,否则您可能会调用未定义的行为(使用 std::copy如果数组最初分配为 myType);
  • bufferPtr的对齐方式必须大于或等于alignof(myType);
  • 如果 myType 不可轻易破坏,则 bufferPtr 必须以可识别的方式释放。

关于c++ - 如何使用 std::copy() 复制到指向通用字节缓冲区开头的指针的目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51717383/

相关文章:

c++ - 在什么情况下我应该在 C++ 中使用 memcpy 而不是标准运算符?

c++ - 使用 Poco 库计算文件部分的 MD5

C++ 在句子中查找单词

c++ - Gnuplot Windows 在 Ubuntu 中立即消失

c++ - Vector 和 String 结构的 vector 未正确打印

python - 尝试使用另一个 stackoverflow 答案中的矢量角度公式,但无法让它打印角度

c# - 如何找到与给定向量正交的随机向量

c++ - 在 C++ 中获取 std::map 的最大键的时间复杂度是多少?

c++ - std::列表迭代器

c++ - C++11 std::function 是否限制函数指针可以具有的参数数量?