七、输入/输出流--streambuffer类介绍--缓冲区迭代器


2 缓冲区迭代器

缓冲区和其他存储空间一样,可以使用迭代器访问;

  1. 模板类istreambuf_iterator和ostreambuf_iterator用于从basic_streambuf的对象中读取或写入单个字符。

  2. 包含于头文件<iterator>中;

  3. 与流迭代器唯一区别是: 元素是字符

2.1 Output 缓冲区迭代器

原型为:

template< class CharT, class Traits = std::char_traits<CharT>>
class ostreambuf_iterator

例子:

//--------------省略------------
string mystring ("Some text here...\n");
ostreambuf_iterator<char> out_it (std::cout); // stdout iterator
copy ( mystring.begin(), mystring.end(), out_it);
  1. 第二行:根据cout构造一个输出迭代器
  2. 第三行: 将字符串复制到缓冲区,并且输出到屏幕

输出缓冲迭代器的成员函数:

  • ostreambuf_iterator(ostream) : 为流ostream产生一个迭代器

  • ostreambuf_iterator(buff_ptr):为buff_ptr指向的缓冲区产
    生一个迭代器

  • *iter:无操作,返回iter

  • iter = c : 调用sputc(),对缓冲区写入字符

  • ++iter/iter++ : 无操作,返回iter

  • failed() : 判断输出流迭代器能够执行改写操作

2.2 input stream缓冲区迭代器

  1. 输入流缓冲区迭代器和流istream迭代器所有操作类似
  2. 成员函数equal()判断两个输入流缓冲区迭代器是否相等,当两个迭代器都是或者都不是end-of-stream迭代器时,相等;

各项操作:

成员函数含义
istreambuf_iterator<char>()产生一个end-of-stream迭代器
istreambuf_iterator<char>(istream)为istream产生一个输入缓冲区迭代器,并可能掉头sgetc()获取第一个字符
istreambuf_iterator<char>(buff_ptr)为缓冲区buff_ptr产生一个输入缓冲迭代器,并调用sgetc()获取第一个字符
*iter返回当前字符
++iter以sbumpc读取下一个字符,返回其位置
iter++以sbumpc读取下一个字符,返回一个迭代器
equal()/ ==判断两个迭代器相等
!=判断两个迭代器不等

说明:
1. 从流的当前位置到结尾: 由两个迭代器定义:istreambuf_iterator<char>(istream)表示开始,istreambuf_iterator<char>()表示结尾;
2. 不可能以istream_iterators建立一个子序列;

例子:

//------------------省略---------------------
    ostreambuf_iterator<char> bufferwriter(cout);//cout缓冲区迭代器

    string s = "hello,world!";
    copy(s.begin(), s.end(), bufferwriter);//输出

    istreambuf_iterator<char> isbuffer(cin);//输入缓冲区迭代器
    istreambuf_iterator<char> eof;//流的结束

    while (isbuffer !=eof)//输入不为空
    {
        *bufferwriter++ = *isbuffer++;//输出
    }

结果为;

hello,world!

abcdefg,haha
abcdefg,haha
efg efg
efg efg
^Z
请按任意键继续. . .
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值