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;
}
相关文章
相关标签/搜索