2

ac 配列を期待する関数にベクトルを渡しています。満たされたデータの量を返します (fread と同様)。関数が渡した量を含むようにサイズを変更するようにベクトルに指示する方法はありますか?

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

4

5 に答える 5

8

いいえ、ベクトルを「拡張」する方法はサポートされていないため、直接コピーされた余分な値が含まれます。「容量」に依存して、書き込み可能なサイズのないメモリを割り当てることは、間違いなく依存すべきものではありません。

関数を呼び出す前にサイズを変更し、後で正しい値にサイズを変更して、ベクターに必要な量のスペースがあることを確認する必要があります。例えば

vector.resize(MAX_SIZE);
size_t items = write_array(&(vec[0]), MAX_SIZE)
vector.resize(items);
于 2009-03-03T08:33:51.993 に答える
2

capacity予約されているメモリの量のみを示しますが、ベクトルのサイズではありません。

あなたがすべきことは、最初に必要な最大サイズにサイズ変更することです:

vec.resize(maxSizePossible);
size_t len = cfunc(&(vec[0]));
vec.resize(len);
于 2009-03-03T08:29:02.160 に答える
1

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

于 2009-03-03T08:28:57.357 に答える
1

std::vector には、新しいサイズをパラメーターとする resize() メソッドがあります。そのため、関数によって返された番号で呼び出すだけで問題ありません。

于 2009-03-03T08:30:03.407 に答える
0

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

于 2009-03-03T08:45:29.390 に答える