ファイル読み込みとか

std::fstream を使用すると下のように簡単にファイルを読み込むことができる。

std::ifstream        ifs("Title.pic", std::ios::binary);
std::vector<char>    buffer;
buffer.assign(  std::istreambuf_iterator<char>(ifs),
                std::istreambuf_iterator<char>() );

しかし、いざ使ってみるとバッファへのコピーが遅い遅い…。
まぁ内部でイテレータをぶん回してるから遅いのは当たり前か。


なので、下のように変更。

std::ifstream        ifs("Title.pic", std::ios::binary);
std::vector<char>    buffer;
buffer.resize(ifs.seekg(0, std::ios::end).tellg());
ifs.seekg(0, std::ios::beg).read( &buffer[0], static_cast<std::streamsize>(buffer.size()) );

C言語で言う、freadで一気にバッファにコピーしているような感じ。
上に比べてコードが長くなりますが、かなり高速でバッファにコピーがされます。
適当に測ってみたら20倍近く早くなってました…。


しかし、長いといってもC言語の標準関数を使うよりかははるかに短い…。
STLスゲー。


参考サイト:ファイル読み出しコードの性能評価