[英]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::copy
与std::back_inserter
一起使用:
vec.reserve(128);
std::copy(buffer, buffer+128, std::back_inserter(vec));
另一种选择是使用vector::assign
。
由于指针和迭代器基本相同,您可以使用std::vector::assign
或std::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.