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

穆晨發表於2017-01-26

前言

       標準演算法配合迭代器使用太美妙了,使我們對容器(資料)的處理更加得心應手。那麼,能不能對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 }

       執行結果:

       

相關文章