basic_stringbuf 类
描述对 Elem
类型的元素(其字符特征由类 Tr
确定)与数组对象中存储的元素序列之间的来回传输进行控制的流缓冲区。
语法
template <class Elem, class Tr = char_traits<Elem>,
class Alloc = allocator<Elem>>
class basic_stringbuf : public basic_streambuf<Elem, Tr>
参数
Alloc
allocator 类。
Elem
字符串的基本元素的类型。
Tr
字符串的基本元素上专用的字符特征。
备注
对象根据需要进行分配、扩展和释放以适应序列中的更改。
类 basic_stringbuf<Elem
、Tr
、Alloc
> 的对象将来自其构造函数的 ios_base::
openmode 参数的副本作为其 stringbuf
模式 mode 进行存储:
如果
mode & ios_base::in
不是零,则输入缓冲区可以访问。 有关详细信息,请参阅 basic_streambuf 类。如果
mode & ios_base::out
不是零,则输出缓冲区可以访问。
构造函数
构造函数 | 说明 |
---|---|
basic_stringbuf | 构造 basic_stringbuf 类型的对象。 |
Typedef
类型名称 | 说明 |
---|---|
allocator_type | 该类是模板参数 Alloc 的同义词。 |
char_type | 将类型名与 Elem 模板参数关联。 |
int_type | 使 basic_filebuf 范围中的此类型等效于 Tr 范围中具有相同名称的类型。 |
off_type | 使 basic_filebuf 范围中的此类型等效于 Tr 范围中具有相同名称的类型。 |
pos_type | 使 basic_filebuf 范围中的此类型等效于 Tr 范围中具有相同名称的类型。 |
traits_type | 将类型名与 Tr 模板参数关联。 |
成员函数
成员函数 | 说明 |
---|---|
overflow | 将新字符插入到已满缓冲区时可以调用的受保护虚函数。 |
pbackfail | 受保护虚拟成员函数尝试将元素放回到输入缓冲区中,随后使它成为当前元素(由下一个指针指向)。 |
seekoff | 受保护虚拟成员函数尝试更改受控制流的当前位置。 |
seekpos | 受保护虚拟成员函数尝试更改受控制流的当前位置。 |
str | 设置或获取字符串缓冲区中的文本,而无需更改写入位置。 |
swap | |
underflow | 从输入流中提取当前元素的受保护虚拟成员函数。 |
要求
标头:<sstream>
命名空间: std
basic_stringbuf::allocator_type
该类是模板参数 Alloc 的同义词。
typedef Alloc allocator_type;
basic_stringbuf::basic_stringbuf
构造 basic_stringbuf
类型的对象。
basic_stringbuf(
ios_base::openmode _Mode = ios_base::in | ios_base::out);
basic_stringbuf(
const basic_string<Elem, Tr, Alloc>& str,
ios_base::openmode _Mode = ios_base::in | ios_base::out);
参数
_Mode
ios_base::openmode 中的枚举之一。
str
类型 basic_string 的对象。
备注
第一个构造函数将 null 指针存储在控制输入缓冲区和输出缓冲区的所有指针中。 有关详细信息,请参阅 basic_streambuf 类的备注部分。 它还将 _Mode 存储为 stringbuf 模式。 有关详细信息,请参阅 basic_stringbuf 类的备注部分。
第二个构造函数分配字符串对象 str 控制的序列副本。 如果 _Mode & ios_base::in
是非零值,则其将输入缓冲区设置为在序列的开头开始读取。 如果 _Mode & ios_base::out
是非零值,则其将输出缓冲区设置为在序列的开头开始写入。 它还将 _Mode 存储为 stringbuf 模式。 有关详细信息,请参阅 basic_stringbuf 类的备注部分。
basic_stringbuf::char_type
将类型名与 Elem 模板参数关联。
typedef Elem char_type;
basic_stringbuf::int_type
使 basic_filebuf 范围中的此类型等效于 Tr
范围中具有相同名称的类型。
typedef typename traits_type::int_type int_type;
basic_stringbuf::off_type
使 basic_filebuf 范围中的此类型等效于 Tr
范围中具有相同名称的类型。
typedef typename traits_type::off_type off_type;
basic_stringbuf::overflow
将新字符插入到已满缓冲区时可以调用的受保护虚函数。
virtual int_type overflow(int_type _Meta = traits_type::eof());
参数
_Meta
要插入到缓冲区的字符或 traits_type::eof
。
返回值
如果该函数不成功,它将返回 traits_type::eof
。 否则,它将返回 traits_type::not_eof(_ Meta)。
备注
如果 _Meta 不等于 traits_type::eof,则受保护虚拟成员函数尝试将元素 traits_type::to_char_type(_Meta) 插入输出缓冲区。 它可以用多种方法执行此操作:
如果写入位置可用,它可将元素存储到写入位置并增加输出缓冲区的下一个指针。
它可以通过为输出缓冲区分配新的或额外的存储空间,提供写入位置。 以这种方式扩展输出缓冲区还会扩展任何关联的输入缓冲区。
basic_stringbuf::pbackfail
受保护虚拟成员函数尝试将元素放回输入缓冲区,随后使它成为当前元素(由下一个指针指向)。
virtual int_type pbackfail(int_type _Meta = traits_type::eof());
参数
_Meta
要插入到缓冲区的字符或 traits_type::eof
。
返回值
如果该函数不成功,它将返回 traits_type::eof
。 否则,它将返回 traits_type::not_eof(_ Meta)。
备注
如果 _Meta 等于 traits_type::eof,那么要推送回的元素在当前元素之前实际上已是流中的一个元素了。 否则,则由 byte = traits_type::to_char_type(_ Meta) 替换该元素。 该函数可以用多种方法放回元素:
如果放回的位置可用,且存储在该位置的元素等于 byte,它可以递减输入缓冲区中的下一个指针。
如果放回的位置可用且 stringbuf 模式允许更改序列(mode & ios_base::out 是非零值),则该函数可以将 byte 存储到放回位置并递减输入缓冲区中的下一个指针。
basic_stringbuf::pos_type
使 basic_filebuf 范围中的此类型等效于 Tr
范围中具有相同名称的类型。
typedef typename traits_type::pos_type pos_type;
basic_stringbuf::seekoff
受保护虚拟成员函数尝试更改受控制流的当前位置。
virtual pos_type seekoff(
off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Mode = ios_base::in | ios_base::out);
参数
_Off
要搜寻的相对于 _Way 的位置。 有关详细信息,请参阅 basic_stringbuf::off_type。
_Way
偏移操作的起点。 请参阅 ios_base::seekdir,查看可能的值。
_Mode
指定指针位置的模式。 默认允许修改读取和写入位置。 有关详细信息,请参阅 ios_base::openmode。
返回值
返回新位置或无效的流位置。
备注
对于 basic_stringbuf<Elem, Tr, Alloc>
类的对象,流位置仅包含流偏移量。 如果偏移量为零,将指定受控序列的第一个元素。
确定新的位置,如下所示:
如果
_Way
==ios_base::beg
,则新位置是流的开始位置加上 _Off。如果
_Way
==ios_base::cur
,则新位置是当前流位置加上 _Off。如果
_Way
==ios_base::end
,则新位置是流末尾位置加上 _Off。
如果 _Mode & ios_base::in
是非零值,则函数更改下一个位置以在输入缓冲区中读取。 如果 _Mode & ios_base::out
是非零值,则函数更改下一个位置以在输出缓冲区中写入。 要使流受影响,其必须存在缓冲区。 若要成功执行定位操作,则结果流的位置必须位于受控序列内。 如果函数影响两个流位置,则 _Way 必须是 ios_base::beg
或 ios_base::end
,且将两个流定位在同一个元素中。 否则(或者如果两个位置均不受影响),定位操作失败。
如果此函数成功更改任何一个流位置或两个流位置,则返回结果流位置。 否则,如果失败将返回一个无效的流位置。
basic_stringbuf::seekpos
受保护虚拟成员函数尝试更改受控制流的当前位置。
virtual pos_type seekpos(pos_type _Sp, ios_base::openmode _Mode = ios_base::in | ios_base::out);
参数
_Sp
要搜寻的位置。
_Mode
指定指针位置的模式。 默认允许修改读取和写入位置。
返回值
如果此函数成功更改任何一个流位置或两个流位置,则返回结果流位置。 否则,如果失败将返回一个无效的流位置。 若要确定流位置是否有效,请比较返回值和 pos_type(off_type(-1))
。
注解
对于 basic_stringbuf<Elem, Tr, Alloc
> 类的对象,流位置只包含流偏移量。 如果偏移量为零,将指定受控序列的第一个元素。 新的位置由 _ Sp 确定。
如果 mode & ios_base::in 是非零值,则函数更改下一个位置以在输入缓冲区中读取。 如果 mode & ios_base::out 是非零值,则函数更改下一个位置以在输出缓冲区中写入。 要使流受影响,其必须存在缓冲区。 若要成功执行定位操作,则结果流的位置必须位于受控序列内。 否则(或者如果两个位置均不受影响),定位操作失败。
basic_stringbuf::str
设置或获取字符串缓冲区中的文本,而无需更改写入位置。
basic_string<Elem, Tr, Alloc> str() const;
void str(
const basic_string<Elem, Tr, Alloc>& _Newstr);
参数
_Newstr
新字符串。
返回值
返回 basic_string<Elem, Tr, Alloc > 类的对象,它的受控序列是 *this
控制的序列副本。
备注
第一个成员函数返回 basic_string<Elem, Tr, Alloc
> 类的对象,其受控序列是 *this
控制的序列副本。 复制的序列取决于存储的 stringbuf 模式:
如果 mode & ios_base::out 是非零值且存在输出缓冲区,则序列是整个输出缓冲区(以
pbase
开头的 epptr - pbase 元素)。如果 mode & ios_base::in 是非零值且存在输入缓冲区,则序列是整个输入缓冲区(以
eback
开头的 egptr - eback 元素)。否则,复制的序列为空。
第二个成员函数释放当前由 *this
控制的任何序列。 然后它分配由 _Newstr 控制的序列副本。 如果 mode & ios_base::in 是非零值,则其将输入缓冲区设置为在序列的开头开始读取。 如果 mode & ios_base::out 是非零值,则其将输出缓冲区设置为在序列的开头开始写入。
示例
// basic_stringbuf_str.cpp
// compile with: /EHsc
#include <iostream>
#include <sstream>
using namespace std;
int main( )
{
basic_string<char> i( "test" );
stringstream ss;
ss.rdbuf( )->str( i );
cout << ss.str( ) << endl;
ss << "z";
cout << ss.str( ) << endl;
ss.rdbuf( )->str( "be" );
cout << ss.str( ) << endl;
}
test
zest
be
basic_stringbuf::traits_type
将类型名与 Tr 模板参数关联。
typedef Tr traits_type;
注解
该类型是模板参数 Tr 的同义词。
basic_stringbuf::underflow
受保护虚函数从输入流中提取当前元素。
virtual int_type underflow();
返回值
如果该函数不成功,它将返回 traits_type::eof。 否则,它返回输入流中的已转换的当前元素。
备注
受保护的虚拟成员函数尝试从输入缓冲区提取当前元素 byte
,提出当前流位置,并返回元素作为 traits_type::to_int_type( byte)。 它可以一种方式进行此操作:如果读取位置可用,它采用 byte
作为存储在读取位置中的元素,并提出输入缓冲区的下一个指针。
basic_streambuf::swap
将此字符串缓冲区与另一个字符串缓冲区的内容交换。
void basic_stringbuf<T>::swap(basic_stringbuf& other)
参数
其他
其内容将与此 basic_stringbuf 交换的 basic_stringbuf 。
备注
basic_stringbuf::operator=
将运算符右侧的 basic_stringbuf 内容赋予左侧的 basic_stringbuf。
basic_stringbuf& basic_stringbuf:: operator=(const basic_stringbuf& other)
参数
其他
将 basic_stringbuf 中的内容(包括区域设置特征)赋予运算符左侧的 stringbuf。