29項 1文字ごとの入力にはistreambuf_iteratorの使用を考えよう
1文字ごとの入力にはistreambuf_iteratorの使用を考えよう
stringオブジェクトにテキストファイルをコピーする、次のコードを考えます。
ifstream inputFile("test.txt"); inputFile.unsetf(ios::skipws); //空白も読み込む istream_iterator<char> databegin(inputFile); istream_iterator<char> dataEnd; string fileData(databegin, dataEnd);
istream_iteratorは、入力ストリームのoperator>>で読み込みを行います。
operator>>は呼び出しごとに複雑な処理を行うため、無駄なコストがかかります。
istreambuf_iteratorを使えば、無駄なコストを省けます。
ifstream inputFile("test.txt"); istreambuf_iterator<char> databegin(inputFile); istreambuf_iterator<char> dataEnd; string fileData(databegin, dataEnd);
istreambuf_iteratorはoperator>>を使わず、バッファに直接アクセスします。
そのため、skipwsをセットしなくても空白を読み込みます。