ac 配列を期待する関数にベクトルを渡しています。満たされたデータの量を返します (fread と同様)。関数が渡した量を含むようにサイズを変更するようにベクトルに指示する方法はありますか?
もちろん、ベクトルにその量のデータを保持するための capacity() があることを確認します。
いいえ、ベクトルを「拡張」する方法はサポートされていないため、直接コピーされた余分な値が含まれます。「容量」に依存して、書き込み可能なサイズのないメモリを割り当てることは、間違いなく依存すべきものではありません。
関数を呼び出す前にサイズを変更し、後で正しい値にサイズを変更して、ベクターに必要な量のスペースがあることを確認する必要があります。例えば
vector.resize(MAX_SIZE);
size_t items = write_array(&(vec[0]), MAX_SIZE)
vector.resize(items);
capacity
予約されているメモリの量のみを示しますが、ベクトルのサイズではありません。
あなたがすべきことは、最初に必要な最大サイズにサイズ変更することです:
vec.resize(maxSizePossible);
size_t len = cfunc(&(vec[0]));
vec.resize(len);
うーん..
vector.resize(size);
?
std::vector には、新しいサイズをパラメーターとする resize() メソッドがあります。そのため、関数によって返された番号で呼び出すだけで問題ありません。
std::back_inserter
必要なものかもしれません。入力関数がイテレータで動作できると仮定すると、それを渡しますstd::back_inserter(myvector)
。これpush_back
により、すべてがイテレータに書き込まれ、必要に応じて暗黙的にベクトルのサイズが変更されます。