2016-09-12 8 views
-4

私は、コードのこの部分の書き込みがあります。フィードのstd ::ベクトル<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を実行することだけです。より良い方法がありますか?それはあなたの羽をフリル場合

+2

*** [ドキュメント](http://en.cppreference.com/w/cpp/container/vector)***を読んで読む価値があるかもしれません。それはどの機能が何をするのかを教えてくれます。 – Galik

答えて

2

まあ、移動セマンティクスで、あなたは、単に

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

を行うことができ、あなたはstd::back_inserterと一緒std::copyを使用することができます。

vec.reserve(128); 
std::copy(buffer, buffer+128, std::back_inserter(vec)); 

別のオプションはvector::assignを使用することです。

+0

'vec = std :: vector(buffer、128);'実際に動作しますか?どのコンストラクタが呼び出すでしょうか? – wally

+0

@flatmouse、これはコピー貼り付け時に起こります。 – SergeyA

+0

それは数えられると思っています。 :) – wally

2

ポインタとイテレータは基本的に同じものなので、std::vector::assignまたはstd::vector::insertを使用できます。 insertは、ベクター内の任意の既存の要素に追加する一方assignは範囲にベクトルを設定します

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); 
関連する問題