インスタンス間でデータを効率的にコピーしたいと考えています。std::streambuf
つまり、文字ごとのコピーを実行するのではなく、それらの間でデータのブロックをシャベルで処理したいと考えています。たとえば、これは私が探しているものではありません。
stringbuf in{ios_base::in};
stringbuf out{ios_base::out};
copy(istreambuf_iterator<char>{in},
istreambuf_iterator<char>{},
ostreambuf_iterator<char>{out});
これには構文糖衣があり、もう少しエラーチェックが行われます:
ostream os{&out};
os << ∈
operator<<(basic_streambuf<..>*)
これは、私の標準ライブラリ (Mac OS X、XCode 7)での実装のスニペットです。
typedef istreambuf_iterator<_CharT, _Traits> _Ip;
typedef ostreambuf_iterator<_CharT, _Traits> _Op;
_Ip __i(__sb);
_Ip __eof;
_Op __o(*this);
size_t __c = 0;
for (; __i != __eof; ++__i, ++__o, ++__c)
{
*__o = *__i;
if (__o.failed())
break;
}
要するに、これはまだ文字ごとのコピーです。標準ライブラリが、文字ごとのトランスポートとは対照的に、sputn
ストリームバッファのブロック レベルのメンバー関数に依存するアルゴリズムを使用することを期待していました。sgetn
標準ライブラリはそのようなアルゴリズムを提供していますか、それとも自分で作成する必要がありますか?