当前位置:  开发笔记 > 编程语言 > 正文

将原始字节数组复制到空字节向量的最有效方法

如何解决《将原始字节数组复制到空字节向量的最有效方法》经验,为你挑选了1个好方法。

我有一个场景,我需要将原始动态分配的uint8_t数组的内容复制到一个向量中(无论何时发生这种情况,都保证为).

vector 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哪个需要将内存清零,所以我猜它会慢一点......

还有,还有其他建议吗?



1> Ryan McClear..:

如果在复制发生之前不需要创建向量,则可以始终将原始数组传递给向量的构造函数:

std::vector myVector(myRawArray, myRawArray + byteCount);

如果您确实需要事先构造向量,则以下是一个选项:

std::vector 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.速度差异很可能会随着不同的编译器而改变.

我希望这有帮助.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有