簡體   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