将一批unsigned char的数据快速高效的拷贝到std::vector<unsigned char>
最简洁高效,一次分配 + 一次拷贝。3.使用 memcpy(最快)1.构造时直接初始化(推荐)2.assign() 方法。4.insert() 方法。
·
几种拷贝方式对比
1.构造时直接初始化(推荐)
unsigned char* data = ...;
size_t len = ...;
std::vector<unsigned char> vec(data, data + len);
最简洁高效,一次分配 + 一次拷贝。
2.assign() 方法
std::vector<unsigned char> vec;
vec.assign(data, data + len);
3.使用 memcpy(最快)
std::vector<unsigned char> vec(len); // 预分配
std::memcpy(vec.data(), data, len);
4.insert() 方法
std::vector<unsigned char> vec;
vec.reserve(len); // 预分配,避免多次扩容
vec.insert(vec.end(), data, data + len);
5.std::copy
std::vector<unsigned char> vec(len);
std::copy(data, data + len, vec.begin());
性能对比
这里写个案例:
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
vector<unsigned char> example(100000);
int main()
{
string h1 = "99999999";
string h2 = "88888888";
unsigned char* h3 = (unsigned char*)"4589234579342759324632963";
// 向vector中拷贝内容,memcpy是比较高效的方法,但要提前分配好空间,否则会出现段错误问题
memcpy(example.data(), (unsigned char*)h1.c_str(), h1.size());
memcpy(example.data()+ h1.size(), (unsigned char*)h2.c_str(), h2.size());
memcpy(example.data() + h1.size() + h2.size(), h3, strlen((char*)h3)); // 这里必须用strlen, 用sizeof返回的是指针类型的大小
// 证明结果
for (int i = 0; i < example.size(); i++) cout << example[i];
cout << endl;
}
输出结果:
99999999888888884589234579342759324632963
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)