質問
c配列を期待する関数にベクトルを渡します。埋められたデータの量を返します(freadと同様)。関数に渡された量を含めるためにサイズを変更するようにベクターに指示する方法はありますか?
もちろん、ベクターにその量のデータを保持するための容量()があることを確認します。
解決
いいえ、サポートされている" expand"する方法はありません。直接コピーされた追加の値を含むようにベクトル。「容量」に依存書き込み可能なサイズのないメモリを割り当てることは、絶対に頼るべきではありません。
関数を呼び出す前にサイズを変更し、その後正しい値にサイズ変更することにより、ベクターに必要なスペースがあることを確認する必要があります。例:
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);
hmm ..
vector.resize(size);
std :: vectorには、パラメーターとして新しいサイズを使用したresize()メソッドがあります。したがって、関数から返された番号を使用して呼び出すだけで問題ありません。
std :: back_inserter
が必要な場合があります。入力関数がイテレータで動作できると仮定して、 std :: back_inserter(myvector)
を渡します。これにより、イテレータに書き込まれたすべてが push_back
され、必要に応じて暗黙的にベクトルのサイズが変更されます。
所属していません StackOverflow