从unsigned char *中输入std :: vector <unsigned char =“”>

时间:2016-09-12 19:55:49

标签: c++ vector

我写了这段代码:

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

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

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

我不知道在最后一行做什么。 实际上唯一有效的是调整向量大小然后做一个memcpy。还有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

由于指针和迭代器基本相同,因此您可以使用std::vector::assignstd::vector::insertassign会将向量设置为范围,而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);