std::istream_iterator<string> in {std::cin}; // Reads strings from cin std::istream_iterator<string> end_in;// End-of-stream iterator預設建構函式會生成一個代表流結束的物件,也就是當 EOF 被識別時的那種物件。
std::basic_ifstream<wchar_t> file_in{"no_such_file.txt"};// File stream of wchar_t std::istream_iterator<std::wstring, wchar_t> in {file_in}; // Reads strings of wchar_t std::istream_iterator<std::wstring, wchar_t> end_in; // End-of-stream iterator第一條語句定義了一個 wchar_t 字元的輸入檔案流。為了讀這個檔案,第二條語句定義了一個流疊代器。流中的字元型別是由 istream_iteratot 的第二個模板型別引數指定的,在這個範例中是 wchar_t。當然,指定從流中讀入的物件的型別的第一個模板型別引數必須是 wstring,它是 wchar_t 字元的字串型別。
std::cout << "Enter one or more words. Enter ! to end:"; std::istream_iterator<string> in {std::cin}; // Reads strings from cin std::vector<string> words; while(true) { string word = *in; if(word == "!"") break; words.push_back(word); ++in; } std::cout << "You entered " << words.size() << "words." << std::endl;迴圈從標準輸入流中讀取單詞,並把它們新增到 vector 容器中,直到按下確認鍵。表示式 *in 的值是從底層流讀到的當前 string 物件。++in 會導致從流中讀取下一個 string 物件,並儲存到這個疊代器中。下面是執行這段程式碼的範例輸出:
Enter one or more words. Enter ! to end:
Yes No Maybe !
You entered 3 words.
// Calling istream_iterator function members #include <iostream> // For standard streams #include <iterator> // For stream iterators int main() { std::cout << "Enter some integers - enter Ctrl+Z to end.n"; std::istream_iterator<int> iter {std::cin}; // Create begin input stream iterator... std::istream_iterator<int> copy_iter {iter}; // ...and a copy std::istream_iterator<int> end_iter; // Create end input stream iterator // Read some integers to sum int sum {}; while(iter != end_iter) // Continue until Ctrl+Z read { sum += *iter++; } std::cout << "Total is " << sum << std::endl; std::cin.clear(); // Clear EOF state std::cin.ignore(); // Skip characters // Read integers using the copy of the iterator std::cout << "Enter some more integers - enter Ctrl+Z to end.n"; int product {1}; while(true) { if(copy_iter == end_iter) break; // Break if Ctrl+Z was read product *= *copy_iter++; } std::cout << "product is " << product << std::endl; }在顯示輸入提示後,我們可以用一個輸入流疊代器從 cin 中讀取 int 型別的值;然後會複製疊代器物件的一個副本。在原始物件 iter 被使用後,我們可以用副本 y_iter 從 cin 讀取輸入,我們只需要一個結束疊代器物件,因為它從沒有改變。第一個迴圈會求出所有用輸入流疊代器讀入的值的和,直到識別出 EOF 狀態,它是通過從流中讀取 Ctrl+Z 標誌設定的。解除參照 iter 可以使它所指向的值變得可用,之後,後遞增運算會移動 iter,使它指向下一個輸入。如果輸入的是 Ctrl+Z,迴圈結束。
Enter some integers - enter Ctrl+Z to end.
1 2 3 4^Z
Total is 10
Enter some more integers - enter Ctrl+Z to end.
3 3 2 5 4^Z
product is 360
std::cout << "Total is " << std::accumulate(iter, end_iter, 0) <<std::endl;下面是通過用一個輸入流疊代器,將從 cin 得到的浮點值插入到一個容器中的程式碼:
std::vector<double> data; std::cout <<"Enter some numerical values — enter Ctrl+Z to end.n"; std::copy(std::istream_iterator<double>{std::cin}, std::istream iterator <double>{}, std::back_inserter(data));copy() 演算法會將任意個數的值附加到 vector 容器中,直到讀到 Ctrl+Z。vector 容器有一個接受序列來初始化元素的建構函式,因此可以用生成容器的語句中的輸入流疊代器來讀取值:
std::cout << "Enter some numerical values - enter Ctrl+Z to end.n"; std::vector<double> data {std::istream_iterator<double>{std::cin},std::istream_iterator<double>{}};這會從標準輸入流中讀取浮點值,並用它們作為容器中元素的初始值。