直接将数据复制到std::vector中

4

使用memcpy直接将数据复制到std::vector中是否合法?像这样:

char buf[255];
FillBuff(buf);

std::vector<char> vbuf;
vbuf.resize(255)

memcpy(vbuf.data(), &buf, 255);

5
对于像char这样的简单POD类型,可以使用Fine。不要尝试使用例如std::vector<std::string>之类的类型。顺便说一句:如果可能的话,可以尝试使用FillBuff(vbuf.data());直接填充缓冲区而跳过memcpy - user4581301
1
请注意,memcpy(vbuf.data(), &buf, 255); 中的 & 是不必要的;只需使用 memcpy(vbuf.data(), buf, 255); 即可。 - Adrian Mole
2
是的,但为什么不直接使用 std::copy 呢? - Mansoor
可能需要将vbuf.data()指针传递给一个接受char*参数的函数(可能是用普通的C语言编写的函数)。 - Adrian Mole
3
可以,但使用std::copy(std::begin(buf), std::end(buf), vbuf.begin()); - 生成的汇编代码很可能是一样的,但这样更易于维护。 - Ted Lyngmo
1个回答

3
回答您的问题,是的,它可以工作,但这是由于实现了std :: vector<char>。
对于非POD类型和std :: vector具有影响内存布局的特定模板专业化(例如std :: vector<bool>)的类型,它将不起作用。这就是为什么应该使用std :: copy,它将表现正确而不受影响。
正如@user4581301所指出的那样,memcpy可能是不必要的,因为您可以像对待char *缓冲区一样对待std :: vector :: data()。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接