質問

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 され、必要に応じて暗黙的にベクトルのサイズが変更されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top