迭代器和I/O

 

迭代器是一种处理位于容器中的元素序列的非常一般而又极其有用的概念。但是,容器并不是我们能够遇到元素序列的仅有的地方。例如,一个输入流也能产生一个值的序列,我们也会把一个值的序列写进一个输出流中。正因为这样,人们也将迭代器的概念很有效地应用到输入和输出上。

要做出一个ostream_iterator,我们需要描述被使用的将是哪个流,还要描述写入其中的对象的类型。例如,我们可以定义一个引用了标准输出流cout的迭代器:

 
给 *oo赋值的效果就是使被赋的值送到cout。例如,
 

这就形成另一种向标准输出写规范信息的方式。这里 ++oo的记法是模仿通过指针向数组写入的方式。对于简单的工作,这种方式不会是我的第一选择。但把输出处理为一种只能写入的容器是很有用的,我们不久就会看得更清楚—如果现在还没完全明白的话。

与此类似,一个istream_iterator就是某种东西,它使我们可以像从容器读出一样从输入流中读出。同样,我们必须描述所用的输入流和所期望的值类型:

 
由于输入迭代器总是成对出现,以表示一个序列,因此我们也就必须提供另一个istream_iterator去表示输入的结束。这就是那个默认的istream_iterator:
 
现在我们就能从输入流读入Hello, world!,而后再次将它写出去:
 
实际中,istream_iterator和ostream_iterator并不是想供人们直接使用的,它们主要是为了给算法提供参数。例如,我们可以写出一个简单程序,它读入一个文件,对所读的东西排序,去掉重复,最后将结果写入另一个文件:
 
ifstream就是可以附着到文件上的istream,ofstream是可以附着到文件上的ostream。ostream_iterator的第二个参数用于分隔各个输出值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值