}/************
iostream iterator
STL定義了供輸入及輸出的iostream iterator類,稱為
istream_iterator和ostream_iterator,分别支援單一
型别的元素的讀取和寫入。
使用方法:
1.包含頭檔案:
#include <iterator>
using namespace std;
2.像使用其他iterator一樣使用istream_iterator和
ostream_iterator。如:
使用一對“連接配接至标準輸入”的iterator用于标示元素範圍:
// 将is定義為一個“連接配接至标準輸入裝置”的istream_iterator
istream_iterator<string> is(cin);
// 定義istream_iterator時不為它指定istream對象,它即代表
// 了end-of-file。
istream_iterator<string> eof;
ostream_iterator<string> os(cout, " ");
除了“連接配接至标準輸入”外,還可以連接配接至其他裝置,如檔案:
#include <fstream>
using namespace std;
ifstream in_file("in.txt");
ofstream out_file("in.txt");
if ( !in_file || !out_file )
{
cerr << "failed to open the necessary file! /n";
return -1;
}
istream_iterator<string> is(in_file);
istream_iterator<string> eof;
ostream_iterator<string> os(out_file, " ");
*************/
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
int main()
{
// 1. 标準輸入輸出操作。
istream_iterator<string> is(cin);
istream_iterator<string> eof;
vector<string> text;
// 将标準輸入的内容複制至text中。
// 由于使用的是vector,故使用back_inserter()
copy(is, eof, back_inserter(text));
// do something.
sort(text.begin(), text.end());
// 輸出至标準輸出。
ostream_iterator<string> os(cout, " ");
copy(text.begin(), text.end(), os);
// 2. 非标準輸入輸出操作:檔案讀寫操作。
ifstream in_file("in.txt");
ofstream out_file("in.txt");
if ( !in_file || !out_file )
{
cerr << "failed to open the necessary file! /n";
return -1;
}
istream_iterator<string> is2(in_file);
istream_iterator<string> eof2;
vector<string> text2;
copy(is2, eof2, back_inserter(text2));
sort(text2.begin(), text2.end());
ostream_iterator<string> os2(out_file, " ");
copy(text2.begin(), text2.end(), os2);
return 0;
}