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;
    }

  • 相关阅读:
    python3编写网络爬虫18-代理池的维护
    python3编写网络爬虫17-验证码识别
    python3编写网络爬虫16-使用selenium 爬取淘宝商品信息
    python3编写网络爬虫15-Splash的使用
    python3编写网络爬虫14-动态渲染页面爬取
    LeetCode959 由斜杠划分区域(Java并查集)
    编译原理--语法分析之LR分析法的简单实现
    VsCode背景图片设置
    编译原理--基于Lex的词法分析器实验
    HDFS常用的shell命令
  • 原文地址:https://www.cnblogs.com/jinxiang1224/p/8468423.html
Copyright © 2011-2022 走看看