Stream Iterator(流迭代器)

           stream iterator 是另外一種迭代器適配器,這是個用來讀寫stream(I/O通道的對象)的迭代器,該迭代器可以從鍵盤中獲取輸入的內容,一樣的,咱們也能夠把一個算法的輸出結果從新導向到一個文件或屏幕上。具體來講,一個istream迭代器能夠從input stream中讀取元素,而一個ostream迭代器能夠用來對output  stream寫入元素。html

 istream迭代器

istream迭代器類對象是istream_iterator<T> 形式,istream_iterator是類模板類型,該類型利用operator >> 從input stream中讀取對應的元素;爲了解決讀取動做失敗或爲讀取結束產生一個結束標誌位,須要產生一 個結束標誌的end-of-stream 迭代器,該迭代器可由istream迭代器的默認構造函數產生。
        istream_iterator<T>()                 做用: 能夠產生一個end-of-stream迭代器;
        istream_iterator<T>(istream)     做用:能夠爲istream產生一個迭代器,須要input stream做爲參數,即cin;

 ostream迭代器

        ostream迭代器類對象是ostream_iterator<T> 形式,ostream_iterator是類模板類型,該類型利用operator << 完成「賦值」操做;
        ostream_iterator<T> (ostream)              做用:爲ostream產生一個ostream迭代器,須要提供output steam做爲參數,即cout。
        ostream_iterator<T> (ostream, delim)  做用:爲ostream產生一個ostream迭代器,各個元素以delim爲分隔符,delim的類型是const char *;

例子1

/************************************************************************/
//功能:從標誌輸入讀取全部的輸入文字,排序,將不重複的文件打印到屏幕                                                             
/************************************************************************/
void StreamIterator()
{
	vector<string> strVector;

	//istream_iterator 是輸入流迭代器
	copy(istream_iterator<string>(cin), istream_iterator<string>(), back_inserter(strVector));

	sort(strVector.begin(), strVector.end());

	//類unique算法,消除毗鄰的相同元素值,ostream_iterator 輸出流迭代器
	unique_copy(strVector.begin(), strVector.end(), ostream_iterator<string>(cout, "\n"));

}

含義說明:

1.istream_iterator<string>(cin)
      該定義會產生一個可從「標準輸入流 cin」讀取數據的stream iterator,其中 模板參數string 表示steam iterator讀取參數的類型,這些元素同operator >>讀取進來。
2.istream_iterator<string>() 
       該定義會調用istream_tream的默認構造函數,會產生一個「流結束符(end-of-steam)的迭代器」,表示讀取結束的標誌。
3.ostream_iterator<string>(cout, "\n")
       該定義表示將算法的結果"向標準輸出流cout輸出數據,而且每一個string元素間以換行符分隔"。

例子二

/****************************************************
*函數名稱:OstreamExample
*功    能:output迭代器的用法
*做    者:Jin
*日    期:2016年5月22日
****************************************************/
void OstreamExample()
{
	
	//產生ostream迭代器,指向標準輸出(屏幕)
	ostream_iterator<int> IntWriter(cout, " \n");

	*IntWriter = 42;//屏幕打印42並換行
	IntWriter++;
	
	*IntWriter = 77;//屏幕打印77並換行
	IntWriter++;

	*IntWriter = -5;//屏幕打印-5    並換行
	IntWriter++;

	vector<int> IntVector;
	for (int i = 0;i < 10; ++i)
	{
		IntVector.push_back(i);
	}
	
	//各元素以talbe鍵分隔
	copy(IntVector.begin(), IntVector.end(), ostream_iterator<int>(cout, "\t"));
	
	//各元素以<分隔
	copy(IntVector.begin(), IntVector.end(), ostream_iterator<int>(cout, " < "));
	cout << endl;
}
相關文章
相關標籤/搜索