zoukankan      html  css  js  c++  java
  • Stream Iterator(流迭代器)

               stream iterator 是另一种迭代器适配器,这是个用来读写stream(I/O通道的对象)的迭代器,该迭代器能够从键盘中获取输入的内容,同样的,我们也可以把一个算法的输出结果重新导向到一个文件或屏幕上。具体来说,一个istream迭代器可以从input stream中读取元素,而一个ostream迭代器可以用来对output  stream写入元素。

     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, "
    "));
    
    }

    含义说明:

    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, " ")
           该定义表示将算法的结果"向标准输出流cout输出数据,并且每个string元素间以换行符分隔"。

    例子二

    /****************************************************
    *函数名称:OstreamExample
    *功    能:output迭代器的用法
    *作    者:Jin
    *日    期:2016年5月22日
    ****************************************************/
    void OstreamExample()
    {
    	
    	//产生ostream迭代器,指向标准输出(屏幕)
    	ostream_iterator<int> IntWriter(cout, " 
    ");
    
    	*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, "	"));
    	
    	//各元素以<分隔
    	copy(IntVector.begin(), IntVector.end(), ostream_iterator<int>(cout, " < "));
    	cout << endl;
    }

  • 相关阅读:
    背水一战 Windows 10 (61)
    背水一战 Windows 10 (60)
    背水一战 Windows 10 (59)
    背水一战 Windows 10 (58)
    背水一战 Windows 10 (57)
    背水一战 Windows 10 (56)
    背水一战 Windows 10 (55)
    背水一战 Windows 10 (54)
    背水一战 Windows 10 (53)
    背水一战 Windows 10 (52)
  • 原文地址:https://www.cnblogs.com/jinxiang1224/p/8468423.html
Copyright © 2011-2022 走看看