我写了这段代码:
unsigned char *buffer = ...
...
std::vector<unsigned char> vec(buffer,128);
这有效,但我想在声明后提供向量(假设向量是一个类的字段)
unsigned char *buffer = ...
...
std::vector<unsigned char> vec;
...
vec = vec(buffer,128) ???
我不知道在最后一行做什么。 实际上唯一有效的是调整向量大小然后做一个memcpy。还有更好的方法吗?
答案 0 :(得分:2)
好吧,使用移动语义,你可以简单地做
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
。
答案 1 :(得分:2)
由于指针和迭代器基本相同,因此您可以使用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);