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