第十五篇:流迭代器 + 算法灵活控制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 }
运行结果: