迭代器和I/O

来源:互联网 发布:金伯利钻石怎么样 知乎 编辑:程序博客网 时间:2024/05/17 00:17
 

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

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

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

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

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

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