我有一个场景,我需要将原始动态分配的uint8_t
数组的内容复制到一个向量中(无论何时发生这种情况,都保证为空).
vectormyVector; const uint8_t* myRawArray;
对我来说非常重要的是复制操作尽可能高效且可移植(可能会使用各种编译器版本).
我想用的一种方法是这样的:
myVector.reserve(byteCount); myVector.insert(myVector.begin(), myRawArray, myRawArray + byteCount);
关于速度如何与此相比的任何想法:
myVector.resize(byteCount); memcpy(myVector.data(), myRawArray, byteCount);
我想memcpy
应该很快,但后来我被迫使用resize
哪个需要将内存清零,所以我猜它会慢一点......
还有,还有其他建议吗?
如果在复制发生之前不需要创建向量,则可以始终将原始数组传递给向量的构造函数:
std::vectormyVector(myRawArray, myRawArray + byteCount);
如果您确实需要事先构造向量,则以下是一个选项:
std::vectormyVector; // ... 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.速度差异很可能会随着不同的编译器而改变.
我希望这有帮助.