繁体   English   中英

饲料 std::vector<unsigned char> 来自无符号字符 *

[英]Feed std::vector<unsigned char> from unsigned char *

我写了这段代码:

unsigned char *buffer = ...
...
std::vector<unsigned char> vec(buffer,128);

这有效,但我想在声明后提供向量(假设向量是一个类的字段)

unsigned char *buffer = ...
...
std::vector<unsigned char> vec;
...
vec = vec(buffer,128) ???

我不知道在最后一行做什么。 唯一真正有效的是调整向量的大小,然后执行 memcpy。 有没有更好的办法?

好吧,使用移动语义,你可以简单地做

vec = std::vector<unsigned char>(buffer, buffer + 128);

如果这惹恼了您,您可以将std::copystd::back_inserter一起使用:

vec.reserve(128);
std::copy(buffer, buffer+128, std::back_inserter(vec));

另一种选择是使用vector::assign

由于指针和迭代器基本相同,您可以使用std::vector::assignstd::vector::insert assign会将向量设置为范围,而insert会将其添加到向量中的任何现有元素

vec.assign(buffer, buffer + size_of_buffer)
//or
vec.insert(vec.end(), buffer, buffer + size_of_buffer)
           ^^^^^^^^^ position to insert the elements before

还要注意的是

std::vector<unsigned char> vec(buffer,128);

不是std::vector的有效构造函数调用如果您尝试直接从需要的缓冲区构造向量

std::vector<unsigned char> vec(buffer, buffer + size_of_buffer);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM