c++ - 将原始字节数组复制到空字节 vector 中的最有效方法

标签 c++ vector stl

我有一个场景,我需要将原始动态分配的 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/

相关文章:

c++ - 组框外观

c++ - 为什么 int x{ y = 5 } 可能?

c++ - 公开类拥有的资源的正确方法是什么?

c++ - 如何在OPENCV C++中将元素存储到 vector 的 vector

c++ - 如何检查 hash_map 中我的自定义哈希是否良好?

c++ - 没有这样的插槽 QProgressBar::setValue(const int)

c++ - 在 vector 中设置 vector

vector - 如何在Option <String>的向量中查找元素

C++ 将成员变量传递给成员类

c++ - 为什么我应该使用 Apache C++ 标准库而不是任何其他 STL 实现以及 Boost?