我有一个场景,我需要将原始动态分配的 uint8_t
数组的内容复制到一个 vector 中(无论何时发生这种情况,它都保证为空 ).
vector<uint8_t> myVector;
const uint8_t* myRawArray;
复制操作尽可能高效且可移植(可能会使用各种编译器版本)对我来说非常重要。
我想到的一种方法是:
myVector.reserve(byteCount);
myVector.insert(myVector.begin(), myRawArray, myRawArray + byteCount);
关于速度与这个相比如何的任何想法:
myVector.resize(byteCount);
memcpy(myVector.data(), myRawArray, byteCount);
我想 memcpy
应该很快,但后来我被迫使用 resize
需要将内存清零,所以我想它会减慢一点..
此外,还有其他建议吗?
最佳答案
如果您不需要在复制发生之前创建 vector ,您总是可以将原始数组传递给 vector 的构造函数:
std::vector<uint8_t> myVector(myRawArray, myRawArray + byteCount);
如果您确实需要预先构造 vector ,可以选择以下方法:
std::vector<uint8_t> myVector;
// ... do some stuff ...
// Now, we're ready for the copy, and byteCount is known.
myVector.reserve(byteCount);
std::copy(myRawArray, myRawArray + byteCount, std::back_inserter(myVector));
我建议使用 std::copy 除非 memcpy 被证明更快。 std::copy 在 C++ 代码中更安全、更惯用,但如果确实证明它更快,请不要害怕使用 memcpy。速度差异很可能会随着编译器的不同而改变。
希望对您有所帮助。
关于c++ - 将原始字节数组复制到空字节 vector 中的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34552783/