2009-03-03 8 views
2

私のベクトルをc配列を必要とする関数に渡しています。それは、(freadに似た)それが満たしたデータの量を返します。関数が渡した量を含めるようにサイズを変更するようにベクトルを伝える方法はありますか?メモリとして渡されるベクトルのサイズを拡大する

もちろん、ベクトルにはそのデータ量を保持するためのcapacity()があることを確認してください。

答えて

8

いいえ、ベクターに直接的にコピーされた余分な値が含まれるようにベクターを「展開」する方法はありません。書き込むことができるサイズのないメモリを割り当てるために「容量」に依存することは間違いありません頼りになるはずです。

関数を呼び出す前にサイズを変更し、その後に正しい値にサイズを変更することによって、ベクトルに必要な領域があることを確認する必要があります。例えば。

vector.resize(MAX_SIZE); 
size_t items = write_array(&(vec[0]), MAX_SIZE) 
vector.resize(items); 
1

うーん...
vector.resize(size);

2

capacityは、どれだけのメモリが予約されているかを示しますが、ベクトルのサイズではありません。あなたは何をすべき

さは、第1の最大必要なサイズに変更:

vec.resize(maxSizePossible); 
size_t len = cfunc(&(vec[0])); 
vec.resize(len); 
1

のstd ::ベクトルは、そのパラメータとして新しいサイズにリサイズ()メソッドを持っています。だからあなたの関数が返す数値で呼び出すだけでいいはずです。

0

std::back_inserterが必要な場合があります。あなたの入力関数がイテレータで動作できると仮定すると、std::back_inserter(myvector)に渡します。それはすべてpush_backイテレータに書き込まれ、必要に応じて暗黙的にベクトルのサイズを変更します。

関連する問題