第十五篇:流迭代器 + 算法灵活控制IO流

前言

       标准算法配合迭代器使用太美妙了,使我们对容器(数据)的处理更加得心应手。那么,能不能对IO流也使用标准算法呢?有人认为不能,他们说因为IO流不是容器,没有迭代器,故无法使用标准算法。他们错了,错在IO流确实不是容器,但它能绑定一种特殊的迭代器,叫做流迭代器。一些算法能以流迭代器为参数,对IO流进行控制。

一个经典的编程问题

  从标准输入读取一些数,再将读取的不重复的数写到标准输出。

使用流迭代器巧妙解决掉上述问题

 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 // 使用非标准的迭代器都要包含这个头文件
 5 #include <iterator>
 6 
 7 using namespace std;
 8 
 9 int main()
10 {
11     /*
12      * 定义输入流迭代器
13      * 只有键入ctrl+d结束输入后,后两句方可执行。
14     */
15     istream_iterator<int> cin_it(cin);
16     // 定义输入流迭代器时如果没有给参数,那么默认迭代器指向刚超出末端的位置。
17     istream_iterator<int> eof;
18 
19     // 输入流迭代器作为参数给vector容器赋值
20     vector<int> vec(cin_it, eof);
21 
22     // 对vec容器元素进行排序
23     sort(vec.begin(), vec.end());
24 
25     // 创建输出流迭代器
26     ostream_iterator<int> output(cout, " | ");
27 
28     cout << endl;
29     // 将vec容器内容复制到输出流
30     unique_copy(vec.begin(), vec.end(), output);
31 
32     cout << endl;
33     
34     return 0;
35 }

       运行结果:

       

posted @ 2017-01-26 22:40  穆晨  阅读(268)  评论(0编辑  收藏  举报