[英]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.