C++ 如何使用std::copy()复制到指向字节通用缓冲区开头的目标?
在本例中,假设myVector是某种自定义类型的std::vectorC++ 如何使用std::copy()复制到指向字节通用缓冲区开头的目标?,c++,vector,std,C++,Vector,Std,在本例中,假设myVector是某种自定义类型的std::vectormyType unsigned char* bufferPtr = myBufferOfBytes.getBufferPointer(); std::copy(myVector.begin(), myVector.end(), bufferPtr); 这是否可能以某种方式实现,或者我只能使用std::memcpy()来实现这一点?您可以使用未初始化的\u copy并将缓冲ptr强制转换为预期类型: std::uninitia
myType
unsigned char* bufferPtr = myBufferOfBytes.getBufferPointer();
std::copy(myVector.begin(), myVector.end(), bufferPtr);
这是否可能以某种方式实现,或者我只能使用
std::memcpy()
来实现这一点?您可以使用未初始化的\u copy
并将缓冲ptr
强制转换为预期类型:
std::uninitialized_copy(myVector.begin(), myVector.end(), reinterpret_cast<myType*>(bufferPtr));
std::未初始化的拷贝(myVector.begin()、myVector.end()、重新解释转换(bufferPtr));
通常的警告适用于:
- 确保
的长度足以容纳整个副本李>bufferPtr
最初必须分配为bufferPtr
的数组,否则您可能会调用未定义的行为(如果数组最初分配为unsigned char
,则使用myType
)李>std::copy
的对齐必须大于或等于bufferPtr
李>alignof(myType)
- 如果
不是可破坏的,那么myType
必须以知道的方式释放bufferPtr
未初始化的\u copy
并将缓冲ptr
强制转换为预期类型:
std::uninitialized_copy(myVector.begin(), myVector.end(), reinterpret_cast<myType*>(bufferPtr));
std::未初始化的拷贝(myVector.begin()、myVector.end()、重新解释转换(bufferPtr));
通常的警告适用于:
- 确保
的长度足以容纳整个副本李>bufferPtr
最初必须分配为bufferPtr
的数组,否则您可能会调用未定义的行为(如果数组最初分配为unsigned char
,则使用myType
)李>std::copy
的对齐必须大于或等于bufferPtr
李>alignof(myType)
- 如果
不是可破坏的,那么myType
必须以知道的方式释放bufferPtr
myType
@JerryCoffin,谢谢提醒。我现在正在扩展警告列表。或者,将myVector
视为无符号字符,并复制它们。根据缓冲区中当前的内容,您可能首先需要一些位置消息,即使对于myType=int
。至少在形式上是这样@zneak:是的——但大多数这样的代码都依赖于此(例如,通过网络复制数据并在另一端恢复有意义的内容)。请确保缓冲区正确对齐,以用作myType
@JerryCoffin,谢谢提醒。我现在正在扩展警告列表。或者,将myVector
视为无符号字符,并复制它们。根据缓冲区中当前的内容,您可能首先需要一些位置消息,即使对于myType=int
。至少在形式上是这样@zneak:是的,但大多数这样的代码都依赖于此(例如,通过网络复制数据并在另一端恢复有意义的内容)。