ファイル読み込みとか
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スゲー。
参考サイト:ファイル読み出しコードの性能評価