在此示例中,假设 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/