我有一个场景,我需要将原始动态分配的 uint8_t
数组的内容复制到一个向量中(这种情况发生时保证为 空)。
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
这需要将内存清零,所以我想它会减慢一点..
另外,还有什么其他建议吗?
原文由 mk33 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您不需要在复制之前创建向量,您始终可以将原始数组传递给向量的构造函数:
如果您确实需要事先构造向量,则可以选择以下方法:
我建议使用 std::copy 除非 memcpy 被证明更快。 std::copy 在 C++ 代码中更安全、更惯用,但如果确实证明它更快,请不要害怕使用 memcpy。速度差异很可能会随着不同的编译器而改变。
我希望这有帮助。