いっぱいになるまでメモリのチャンクを別の連続メモリ領域に追加するための既知のヘッダーのみの STL のようなコンテナー/アロケーターはありますか? 現時点std::vector<char> vec
では、便利なインターフェイスがあるため、を使用していますが、最適ではなく、どういうわけか自分のニーズに合わせて悪用していると思います。
最初std::vector::reserve
にその容量を修正し、不要な再割り当てを避けるために必要なメモリを一度だけstd::copy(&chunk[0], &chunk[size], vec.data() + vec.size())
割り当ててから、そのたびに新しいメモリ チャンクをunfilled
ベクターの背後のメモリ領域に追加します (もちろんsize() <= capacity()
)。各コピーの後、それに応じてベクトルのサイズを明示的に更新します。わかりました、back_inserter を使用できます。しかし、これは今のポイントではありません (以下を参照)。
もちろん、最後に呼び出すことができるように、どの実装でstd::copy
も特殊化できますが、これは保証ではありません。そのような保証を得るために、ベクトルによって既に割り当てられているメモリにチャンクを追加するために自分で呼び出すことは、ただ醜いです。より良い/よりエレガントなオプションはありますか?char
memcpy
memcpy
編集:メモリのチャンクがどのように割り当てられるかを制御できません。それらが与えられます。