我想在实例之间有效地复制数据。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
不是按字符传输。标准库是否提供这样的算法,还是我必须自己推出?