不要なコピーを避けたいです。ファイルをstd :: vectorに読み込む効率的な方法<char>?
std::ifstream testFile("testfile", "rb");
std::vector<char> fileContents;
int fileSize = getFileSize(testFile);
fileContents.reserve(fileSize);
testFile.read(&fileContents[0], fileSize);
(reserve
が実際にベクターには何も挿入されませんので、私は[0]
にアクセスすることはできませんので動作しません):私はの線に沿って何かを目指しています。
もちろん、std::vector<char> fileContents(fileSize)
が機能しますが、すべての要素を初期化するオーバーヘッドがあります(fileSize
はかなり大きい可能性があります)。 resize()
と同じです。
この質問は、オーバーヘッドがどれほど重要であるかについてはそれほど重要ではありません。むしろ、私は別の方法があるかどうかを知りたいだけのことに興味があります。
'push_back'で必要な再配置コストを避けたい場合、' resize'を使って必要なバッファをゼロにするコストを避けたい場合は、 'std :: vector'をまったく使用しないでください。 'boost :: scoped_array'かそれに類するものです。 –